从列表中删除 IQueryable 中的项目
Remove item from IQueryable from List
我的数据库中有 2 个表 Products
和 PremiumProducts
用于 ASP 网络应用程序。
我通过简单的查询检索产品
IQueryable<Product> query = from p in myDataContext.Products select p;
我有一个 PremiumProducts
的列表(其中包含 Product
的 ID)。我试图从上面的查询中删除 PremiumProducts
列表中的 ID,但不确定是否有简单的方法或者我是否需要先将所有 PremiumProducts
转换为 Product
?我试过这个
List<PremiumProducts> premiumProducts;
query = from p in query where (premiumProducts.Contains(p.ID)) select p;
但这当然会带来各种转换错误。
有没有一种简单的方法可以从上面的 query
中删除 PremiumProducts
,或者我是否需要将 PremiumProducts
转换为 Product
,存储 ID 和然后尝试删除具有这些 ID 的查询?
而不是:
query = from p in query where (premiumProducts.Contains(p.ID)) select p;
我建议:
query = from p in query where (!premiumProducts.Select(z => z.ID).Contains(p.ID)) select p;
主要区别:
- 使用
!
(因为你想排除那些在
premiumProducts
).
- 使用
premiumProducts.Select(z => z.ID)
来
确保 contains 是针对 ID
而不是对象(只是
避免你的选角问题)。
我的数据库中有 2 个表 Products
和 PremiumProducts
用于 ASP 网络应用程序。
我通过简单的查询检索产品
IQueryable<Product> query = from p in myDataContext.Products select p;
我有一个 PremiumProducts
的列表(其中包含 Product
的 ID)。我试图从上面的查询中删除 PremiumProducts
列表中的 ID,但不确定是否有简单的方法或者我是否需要先将所有 PremiumProducts
转换为 Product
?我试过这个
List<PremiumProducts> premiumProducts;
query = from p in query where (premiumProducts.Contains(p.ID)) select p;
但这当然会带来各种转换错误。
有没有一种简单的方法可以从上面的 query
中删除 PremiumProducts
,或者我是否需要将 PremiumProducts
转换为 Product
,存储 ID 和然后尝试删除具有这些 ID 的查询?
而不是:
query = from p in query where (premiumProducts.Contains(p.ID)) select p;
我建议:
query = from p in query where (!premiumProducts.Select(z => z.ID).Contains(p.ID)) select p;
主要区别:
- 使用
!
(因为你想排除那些在premiumProducts
). - 使用
premiumProducts.Select(z => z.ID)
来 确保 contains 是针对ID
而不是对象(只是 避免你的选角问题)。