#c# #linq
#c# #linq
Вопрос:
Как я могу создать список из элементов в другом списке?
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**** );
Я использовал ****, чтобы показать, где мое понимание разваливается.
Комментарии:
1. Примеры использования linq см. в msdn. Я думаю, что в некоторых случаях вам нужно будет использовать метод объединения для объединения списка. В некоторых случаях после WHERE вам нужно будет использовать метод SELECT, чтобы получить только некоторые свойства класса вместо всего класса. code.msdn.microsoft.com/101-LINQ-Samples-3fb9811b
Ответ №1:
Вы можете 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();
Комментарии:
1. Было бы лучше, если
postIds
быHashSet
2. Все ответы кажутся близкими, но ваши и abion возвращаются со следующей ошибкой: не удается неявно преобразовать тип ‘System.Linq. IQueryable<App.Models. PostView>’ to’System. Коллекции. Generic.List<App.Models. PostView>’. Существует явное преобразование (вам не хватает приведения?) Есть идеи?
3. @DudeThatCodes Вы объявляли список<PostView>, но возвращали IQueryable . Моя вина, что я этого не уловил. Просто обновил свой ответ.
4. Я чувствую, что все, кто откликнулся, были довольно близки, но ваш сработал для меня лучше всего. Спасибо за помощь.
Ответ №2:
Дайте этому шанс:
List<PostView> viewList = db.PostViews.Where(
u => postList.Any(p => p.PostId == u.PostId));
Ответ №3:
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);
Кажется, у a postview
есть post
. Вам не нужно сначала получать список posts
, а затем получать список views
из этого списка.