8

似乎大多数 LINQ 都是用 lambda 表达式编写的。我如何使用 lambda 重写这个 linq,有点混淆样式(尤其是连接)?

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 };
4

2 回答 2

16

我更喜欢 Joins 的“LINQ 语法”,因为我认为它看起来更简洁。

无论如何,这里是如何将 LINQ 连接转换为“Lambda 表达式”连接。

翻译:

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

是:

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

其他 LINQ 关键字的转换要简单得多(例如OrderBy(u => u.DisplayOrder),只是用.. “链接在一起” - 试一试!

于 2012-12-03T21:36:09.327 回答
8
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});
于 2012-12-03T21:42:03.767 回答