Что такое лямбда-эквивалент этого выражения Linq? - PullRequest
0 голосов
/ 17 мая 2018

Что такое лямбда-эквивалент этого выражения Linq?

var authorList = new List<Author>();
var postList = new List<Post>();
var e = (from p in postList
         from a in authorList
         where p.AuthorId == a.Id
         select new { p, a });

Ответы [ 2 ]

0 голосов
/ 17 мая 2018

Одним из вариантов, который следует рассмотреть, было бы использование Join - поскольку вы фактически выполняете внутреннее объединение:

var results = authorList.Join(postList, z => z.Id, y => y.AuthorId,
    (a, p) => new { p, a });

Пример программы для сравнения двух генерируетте же результаты:

using System;
using System.Collections.Generic;
using System.Linq;

namespace TestProgram
{
    class Program
    {
        public static void Main()
        {
            var authorList = new List<Author>
            {
                new Author() {Id = 3},
                new Author() {Id = 4},
                new Author() {Id = 5}
            };

            var postList = new List<Post>
            {
                new Post() {AuthorId = 1},
                new Post() {AuthorId = 1},
                new Post() {AuthorId = 3},
                new Post() {AuthorId = 3},
                new Post() {AuthorId = 4},
                new Post() {AuthorId = 6}
            };

            var e = (from p in postList
                     from a in authorList
                     where p.AuthorId == a.Id
                     select new { p, a });

            var f = authorList.Join(postList, z => z.Id, y => y.AuthorId, (a, p) => new { p, a });

            Console.WriteLine(e.SequenceEqual(f));
            Console.ReadLine();
        }
    }
}
0 голосов
/ 17 мая 2018

Я полагаю, что прямой синтаксический метод эквивалентен этому:

postList.SelectMany(p => autorList.Where(a => a.Id == p.AutorId).Select(a => new {p, a}));

, что даст полный список каждого поста и автора указанного поста, если у этого поста будет автор.

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