从列表中删除 IQueryable 中的项目

Remove item from IQueryable from List

我的数据库中有 2 个表 ProductsPremiumProducts 用于 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;

主要区别:

  1. 使用!(因为你想排除那些在 premiumProducts).
  2. 使用premiumProducts.Select(z => z.ID)来 确保 contains 是针对 ID 而不是对象(只是 避免你的选角问题)。