linq-versie van een vraag met verhuurde exploitant

Ik heb een dergelijke vraag:

SELECT au_lname,der.col FROM authors INNER JOIN (SELECT t.au_id, COUNT(title_id) AS 'col'
                       FROM titleauthor t GROUP BY t.au_id) der ON authors.au_id=der.au_id

Ik wil dit schrijven met de operator let . Hoe kan ik dit doen?

bedankt

0
Waarom wil je dit schrijven met een exploitant?
toegevoegd de auteur Jon Skeet, de bron
Ik wil 'let' operator leren. Ik hoor dat 'laten' zal worden geconverteerd naar afgeleide tabellen in SQL-uitvoer en ik wil zien wat het verschil is tussen mijn query en uitvoerquery. Help me
toegevoegd de auteur Arian, de bron

1 antwoord

Ik zie geen goede reden om let hier te gebruiken. U kunt gewoon een groepsverbinding gebruiken.

var query = from author in authors
            join title in titleAuthor on author.AuthorId equals title.AuthorId
            into titles
            where titles.Count() != 0
            select new { author.LastName, Count = titles.Count() };

U kon let gebruiken voor de telling hier, veronderstel ik:

var query = from author in authors
            join title in titleAuthor on author.AuthorId equals title.AuthorId
            into titles
            let count = titles.Count()
            where count != 0
            select new { author.LastName, Count = count };

Of u kunt een meer directe vertaling van uw oorspronkelijke zoekopdracht gebruiken:

var innerQuery = from title in titleAuthor
                 group title by title.AuthorId into titles
                 select new { AuthorId = titles.Key, Count = titles.Count() };
var query = from author in authors
            join titleCount in innerQuery
              on author.AuthorId equals titleCount.AuthorId
            select new { author.AuthorId, titleCount.Count };
2
toegevoegd
Zie mijn bewerking voor een alternatief dat dichter bij uw oorspronkelijke vraag staat. Merk op dat de LINQ-uitvoeringsstijl het goedkoop maakt om zoekopdrachten op deze manier te splitsen.
toegevoegd de auteur Jon Skeet, de bron
@Kerezo: Nou, het is zo'n beetje een directe vertaling van je origineel ... wat begrijp je er niet van?
toegevoegd de auteur Jon Skeet, de bron
@Kerezo: de SQL-queryprovider doet alle magie. Ik heb het opgesplitst in twee query's alleen voor leesbaarheid - ik heb liever geen geneste query's en de manier waarop LINQ werkt, maakt het eenvoudig om ze op te splitsen.
toegevoegd de auteur Jon Skeet, de bron
bedankt lieve @Jon maar ik vergelijk de join versie van de bovenstaande query met de afgeleide tabel versie en zie de afgeleide tabel versiekost is 48% en ik wil schrijf mijn vraag op een manier die derived table gebruikt
toegevoegd de auteur Arian, de bron
bedankt lieve @Jon. Kunt u meer uitleg geven over de derde vraag. Dat was geweldig.
toegevoegd de auteur Arian, de bron
Sorry, ja, ik zie dit niet eerder in een Linux-query. Ik vraag me af hoe .Net weet wat te doen om het naar de SQL-versie te vertalen. waarom split je je zoekopdracht in 2 query.thanks beste @ jon. Je bent geweldig
toegevoegd de auteur Arian, de bron