实行“不”(又名“不存在”)在LINQ逻辑(Implement “not in” (aka “not

2019-07-29 18:01发布

建立

  1. 我有两个List<T>的。
  2. 的数据是未归一化,并从不同的来源,其解释了在所希望的逻辑的卷积
  3. 数据中的非正式化合物键是FIELDA,fieldB,fieldC。
  4. 在“田”都是字符串 - 引用类型 - 所以它们的值可能为空。 我想放弃,他们可能在空来匹配记录。 我得到的是,在C#空引用会匹配,但在SQL他们不这样做。 添加!string.IsNullOrEmpty()是很容易的。
  5. 这不是一个关于DB设计或关系代数问题。
  6. 我有覆盖其他标准的其他逻辑。 不建议减少所示那样,这可能扩大的结果集的逻辑。 见上文第5。

问题

我想找到那个listA的不是数组listB根据非正式关键的记录。 然后,我想基于部分关键比赛中以进一步缩小的结果listA的。

问题的SQL版本:

select 
    listA.fieldA, listA.fieldB, matching.fieldC  
 from listA
 left join listB keyList on 
      listA.fieldA = keyList.fieldA and
      listA.fieldB = keyList.fieldB and
      listA.fieldC = keyList.fieldC
 inner join listB matching on
      listA.fieldA = matching.fieldA and
      listA.fieldB = matching.fieldB 
 where
    keyList.fieldA is null  

Answer 1:

SQL到LINQ(案例7 -通过使用和NOT IN子句过滤数据)

注:而不是使用相同的功能,在LINQ查询,但它只是使用! (不)符号吧。 下面是图形表示:

您可以使用, where <list>.Contains( <item> )

var myProducts = from p in db.Products
                 where productList.Contains(p.ProductID)
                 select p;

或者你可以有预先定义为这样的列表:

var ids = {1, 2, 3};

var query = from item in context.items
            where ids.Contains( item.id )
            select item;

对于“不”的情况下,只需添加“!” 在“包含”语句之前运营商。



文章来源: Implement “not in” (aka “not exists”) logic in LINQ