2012-12-03 12 views
7

Wygląda na to, że większość LINQ jest napisana z wyrażeniami lambda. Jak mam zamiar przepisać tę linq używając lambda, trochę pomieszania ze stylem (szczególnie z łączeniami)?Jak przepisać ten LINQ za pomocą sprzężenia z wyrażeniami lambda?

var responses = 
      from c in questionRepository.GetReponses() 
      join o in questionRepository.GetQuestions() on 
      c.QuestionID equals o.QuestionID 
      where c.UserID == 9999 
      orderby o.DisplayOrder 
     select new { o.QuestionText, c.AnswerValue }; 
+0

Naprawdę nie musisz tego przepisywać, tak jak jest, szczerze mówiąc. etimes Używam jednego stylu, a czasem drugiego, i to jest przypadek, w którym prawdopodobnie użyłbym składni zapytania. Z [MSDN] (http://msdn.microsoft.com/en-us/library/bb397676.aspx): "Z reguły podczas pisania zapytań LINQ zalecamy, jeśli to możliwe, składnię zapytań i składnię metod w razie potrzeby . " –

+1

Podoba mi się ten formularz dla JOIN's. Przy "wyrażeń Lambda" wymaga podania 4 argumentów (plus odbiornik), które, mimo że są takie same jak powyżej, wydają się bardziej zagracone. –

+0

Chociaż składnia zapytania jest łatwiejsza do łączenia, składnia lambda jest łatwiejsza do debugowania. Szczegółowe informacje można znaleźć na stronie https://www.simple-talk.com/dotnet/.net-framework/linq-secrets-revealed-chaining-and-debugging/ – Roger

Odpowiedz

15

Preferuję "składnię LINQ" dla łączenia, ponieważ uważam, że wygląda czystsze.

W każdym razie oto, jak tłumaczyć sprzężenie LINQ do "Wyrażenia Lambda" - dołączenie.

tłumaczenie:

from a in AA 
join b in BB on 
a.Y equals b.Y 
select new {a, b} 

Czy:

AA.Join(    // L 
    BB,     // R 
    a => a.Y, b => b.Y // L -> join value, R -> join value 
    (a, b) => new {a, b}) // L+R result 

Inne słowa kluczowe LINQ są znacznie prostsze do konwersji (np OrderBy(u => u.DisplayOrder) i są po prostu "przykuty razem" z . - nadać mu.

+0

@ user166390. – User

+0

Myślę, że brakuje przecinka między b => b.Y a (a, b) => nowy {a, b} Jestem nowy w tym, że mogę się mylić. – WizardHammer

6
var responses = questionRepository.GetReponses() 
        .Join(questionRepository.GetQuestions(), 
         c => c.QuestionID 
         o => o.QuestionID 
         (c, o) => new {c, o}) 
        .Where(x => x.c.UserID == 99999) 
        .OrderBy(x => x.o.DisplayOrder) 
        .Select(x => new {x.o.QuestionText, x.c.AnswerValue}); 
+2

Dzięki temu pomogło. – User

Powiązane problemy