Преобразование выражения запроса в синтаксис метода Linq - PullRequest
1 голос
/ 29 сентября 2011

Я использую EF 4 и C #.

У меня есть запрос вроде:

var contentsAuthor = from c in context.CmsContents
                     join a in context.CmsAuthors on c.AuthorId equals a.AuthorId
                     where a.UserId == userGuid
                     select new
                     {
                         c.Title,
                         c.ContentId
                     };

Я хотел бы переписать его в Linq с лямбда-выражением.Мои вопросы:

  • Как переписать его?
  • Какое имя подходит для моего синтаксиса запроса и нового с Linq и Lambda (выражение запроса и Linq to Entities ???),Пожалуйста, дайте мне ответ на этот вопрос, я в замешательстве.

Примечания: возможно, название этого вопроса не подходит, дайте мне знать, я его улучшу

Спасибо, ребята, заВаша помощь в этом!

Ответы [ 3 ]

3 голосов
/ 29 сентября 2011

Лямбда-выражение должно выглядеть следующим образом:

var contentsAuthor = context.CmsContents
                            .Join(context.CmsAuthors, 
                                  content => content.AuthorId,
                                  author => author.AuthorId,
                                  (content,  author) => new { content, author })
                            .Where(x => x.author.UserId == userGuid)
                            .Select(x => new { x.content.Title, x.content.ContentId });

И ваша, и эта версия являются запросами LINQ.Этот напрямую использует лямбды, тогда как ваша версия использует синтаксический сахар, доступный в C #.Они одинаковые.LINQ-to-Entities не имеет к этому никакого отношения.

В любом случае, если вы используете LINQ-to-Entities, ваше CmsContent должно иметь свойство Author, а ваш запрос уменьшится до:

var contentsAuthor = context.CmsContents
                            .Where(c => c.Author.UserId == userGuid)
                            .Select(c => new { c.Title, c.ContentId });

Поставщик LINQ-to-Entities создаст соединение для вас при преобразовании дерева выражений в запрос SQL.

0 голосов
/ 11 апреля 2019
var result = context.CmsContents
                        .Join(context.CmsAuthors.Where(x => x.auth.UserId == userGuid),
                         content => content.AuthorId,
                         author => author.AuthorId,
                         (cont, auth) => new { cont, auth })
                        .Select(x => new { x.cont.Title, x.cont.ContentId });
0 голосов
/ 29 сентября 2011

Lambda:

var contentsAuthor = context.CmsContents
    .Join(context.CmsAuthors, c => c.AuthorId, a => a.AuthorId, (c, a) => new { Contents = c, Author = a })
    .Where(w => w.Author.UserId == userGuid)
    .Select(s => new { s.Contents.Title, s.Contents.ContentId });

То, как ты это сделал, хорошо. Я называю это синтаксисом запроса, но я не уверен, есть ли у него официальное название.

Для такого рода вещей, проверьте LINQPad . В режиме «Выражение» вы можете напечатать запрос, как у вас, и нажать на символ лямбда, и он покажет вам лямбда-версию вашего запроса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...