2016-10-14 3 views
0

Как создать список из элементов в другом списке?Как создать список предметов из другого списка

List<Post> postList = db.Posts.Where(u => u.PostId == postId).ToList(); 
    List<PostView> viewList = db.PostViews.Where(u => u.PostId **** is equal to PostId within postList****); 

Я использовал ****, чтобы показать, где мое понимание разваливается.

+0

См. Msdn для примеров с использованием linq. Я думаю, что в некоторых случаях вам понадобится использовать метод join для объединения списка. В некоторых случаях после WHERE вам нужно будет использовать метод SELECT для получения только некоторых свойств класса, а не всего класса. https://code.msdn.microsoft.com/101-LINQ-Samples-3fb9811b – jdweng

ответ

2

Вы можете select Идентификатор из другого списка, а затем посмотреть, есть ли этот список contains ваш текущий идентификатор. Хотя, я бы сгенерировал первый список. Если предположить, что ваши идентификаторы имеют тип INT:

List<Post> postList = db.Posts.Where(u => u.PostId == postId).ToList(); 
List<int> postIds = postList.Select(u => u.PostId).ToList(); 
List<PostView> viewList = db.PostViews.Where(u => postIds.Contains(u.PostId)).ToList(); 
+0

Было бы лучше, если бы 'postIds' были' HashSet' –

+0

. Все ответы кажутся закрытыми, но ваши и абзацы возвращаются со следующей ошибкой : Невозможно неявно преобразовать тип 'System.Linq.IQueryable ' в 'System.Collections.Generic.List '. Явное преобразование существует (вам не хватает роли?) Любые идеи? – DudeThatCodes

+1

@DudeThatCodes Вы объявляете список , но возвращаете IQueryable. По моей вине я этого не понимал. Просто обновил свой ответ. – Gavin

0

Дайте этому выстрел:

List<PostView> viewList = db.PostViews.Where(
    u => postList.Any(p => p.PostId == u.PostId)); 
0
List<PostView> viewList = db.PostViews.Where(u => postList.Any(pl=>pl.postId == u.postId)); 

Но вы должны быть в состоянии сделать это в одном кадре:

List<PostView> viewList = db.PostViews.Where(u => u.Post.postId == postId); 

или даже

List<PostView> viewList = db.PostViews.Where(u => u.PostId == postId); 

Кажется, postview имеет post. Вам не нужно сначала получать список posts, а затем получить список views из этого списка.

Смежные вопросы