首页 > 解决方案 > 从列表中的 IQueryable 中删除项目

问题描述

我的数据库中有 2 个表,Products用于PremiumProductsASP Net 应用程序。

我用一个简单的查询检索产品

IQueryable<Product> query = from p in myDataContext.Products select p;

我有一个列表PremiumProducts(其中包含 a 的 ID Product)。我正在尝试PremiumProducts从上面的查询中删除列表中的 ID,但不确定是否有简单的方法,或者我是否需要将所有ID 转换PremiumProductsProduct第一个?我试过这个

List<PremiumProducts> premiumProducts;

query = from p in query where (premiumProducts.Contains(p.ID)) select p;

但这当然会带来各种铸造错误。

有没有一种简单的方法可以PremiumProductsquery上面删除,或者我需要将其转换PremiumProducts为 a Product,存储 ID,然后尝试使用这些 ID 删除查询?

标签: c#asp.netlinqlinq-to-sql

解决方案


而不是:

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)确保包含ID对象不是对象(只是避免您的投射问题)。

推荐阅读