在实体框架的LINQ中使用“NOT IN”从两个表中进行选择

时间:2012-05-04 14:20:40

标签: linq entity-framework linq-to-sql entity-framework-4

我有以下SQL,如何在LINQ中实现它,我在我的MVC项目中使用实体框架。

  SELECT 
  * FROM Catalog.ServiceItem 
  WHERE SKU NOT IN (SELECT ServiceItemSKU FROM Catalog.TaggedServiceItems)

任何想法?

修改: 解答:

var untaggedItems = from item in serviceItems where !taggedServiceItems.Contains(item.SKU) select item;

4 个答案:

答案 0 :(得分:8)

您可以使用Contains执行此类操作:

var result = from item in ServiceItem
    where !TaggedServiceItems.Contains(item.SKU)
    select item;

答案 1 :(得分:1)

试试这个

var Catalog_ServiceItem = ds.Tables["Catalog.ServiceItem"].AsEnumerable();
var Catalog_TaggedServiceItems = ds.Tables["Catalog.TaggedServiceItems"].AsEnumerable();
var _except = from c in Catalog_ServiceItem 
                   join b in Catalog_TaggedServiceItems 
                     on c.Field<string>("ServiceItemSKU ") equals b.Field<string>("ServiceItemSKU ") into j
                   from x in j.DefaultIfEmpty()
                   where x == null
                   select c;

修改

你可以这样做

var _except = Catalog_ServiceItem.Except(Catalog_TaggedServiceItems);

答案 2 :(得分:0)

使用lambda。

dim query=Catalog.ServiceItem.where(function(q) not q.Contains(q.SKU))

答案 3 :(得分:-1)

试试这个:

var untaggedItems = 
  from i in Catalog.ServiceItem
  let taggedItems = (
    from ti = Catalog.TaggedServiceItems
    select ti.ServiceItemSKU ).Distinct()
  where ! taggedItems.Contains( i.SKU )
  select i;