0

设置

  1. 我有两个List<T>
  2. 数据未归一化并且来自不同来源,这解释了所需逻辑中的卷积
  3. 数据中的非正式复合键是 fieldA、fieldB、fieldC。
  4. “字段”是字符串——引用类型——所以它们的值可以为空。我想删除它们可能在 null 上匹配的记录。我得到 C# 中的空引用将匹配,但在 SQL 中它们不匹配。添加一个!string.IsNullOrEmpty()很容易。
  5. 这不是关于数据库设计或关系代数的问题。
  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  
4

1 回答 1

2

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

注意: IN 和 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;

对于“NOT”情况,只需添加“!” “包含”语句之前的运算符。

于 2012-06-04T17:10:30.367 回答