c# - 从列表中的 IQueryable 中删除项目
问题描述
我的数据库中有 2 个表,Products
用于PremiumProducts
ASP Net 应用程序。
我用一个简单的查询检索产品
IQueryable<Product> query = from p in myDataContext.Products select p;
我有一个列表PremiumProducts
(其中包含 a 的 ID Product
)。我正在尝试PremiumProducts
从上面的查询中删除列表中的 ID,但不确定是否有简单的方法,或者我是否需要将所有ID 转换PremiumProducts
为Product
第一个?我试过这个
List<PremiumProducts> premiumProducts;
query = from p in query where (premiumProducts.Contains(p.ID)) select p;
但这当然会带来各种铸造错误。
有没有一种简单的方法可以PremiumProducts
从query
上面删除,或者我需要将其转换PremiumProducts
为 a 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)
确保包含ID
对象不是对象(只是避免您的投射问题)。
推荐阅读
- html - 尽管z-index,下拉菜单仍停留在其他元素后面
- python - 字符串到字典的转换
- css - 如何使用反应将样式添加到具有相邻兄弟的div?
- d3.js - d3 - 将文本与圆心对齐的问题 - 主导基线在 Firefox 上不起作用
- c# - C#遍历对象列表
- r - 尝试使用 geom_polygon 用颜色填充多边形时出错
- c++ - 无法使用 VAO 和 EBO (openGL) 绘制多个对象
- javascript - jQuery 选择器正在选择提交的所有输入类型
- javascript - 为什么内存堆溢出,为什么数组中的最后一项不步进+ 0.1?
- python - 合并 1D-CNN 和 2D-CNN