Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/275.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从列表中删除IQueryable中的项_C#_Asp.net_Linq_Linq To Sql - Fatal编程技术网

C# 从列表中删除IQueryable中的项

C# 从列表中删除IQueryable中的项,c#,asp.net,linq,linq-to-sql,C#,Asp.net,Linq,Linq To Sql,我的数据库中有两个表,分别是ASP Net应用程序的Products和PremiumProducts 我通过一个简单的查询检索产品 IQueryable<Product> query = from p in myDataContext.Products select p; 但这当然会带来各种各样的铸造错误 是否有一种简单的方法可以从上面的查询中删除PremiumProducts,或者我需要将PremiumProducts转换为Product,存储ID,然后尝试使用这些ID删除查询?

我的数据库中有两个表,分别是ASP Net应用程序的
Products
PremiumProducts

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

IQueryable<Product> query = from p in myDataContext.Products select p;
但这当然会带来各种各样的铸造错误

是否有一种简单的方法可以从上面的
查询中删除
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。选择(z=>z.ID)
    确保contains针对的是
    ID
    而不是对象(仅限于 避免你的铸造问题)

  • IQueryable接口继承IEnumerable接口,因此如果它表示查询,则可以枚举该查询的结果。枚举导致执行与IQueryable对象关联的表达式树。因此,您必须将
    IQueryable
    转换为
    List
    您是否试图排除特定
    列表中的ID
    ,还是试图排除通过
    myDataContext.PremiumProducts
    显示的所有(或部分)ID?@pinkfloydx33-我正在尝试排除在“查询”中找到的PremiumProducts列表中存在的所有ID。查询返回'all products',我想从包含所有产品的查询中删除所有PremiumProducts-希望这更清楚一点?它真的是LINQ to SQL吗?
    var results=from p在查询中(!PremiumProducts.Select(z=>z.ID).contains(p.ID))选择p
    
    query = from p in query where (!premiumProducts.Select(z => z.ID).Contains(p.ID)) select p;