2010-06-07 68 views
0

我有一个有多个条件对第LINQ多个条件“的”条款

SELECT * 

FROM 
     CATALOGITEM with (nolock) INNER JOIN CATALOG with (nolock) ON 
     CATALOGITEM.catalog_id = CATALOG.catalog_id and not(catalog.catalog_id = 21) AND NOT(catalog.catalog_id = 20) 

     INNER JOIN PRODUCT with (nolock) ON 
     CATALOGITEM.s_num = PRODUCT .s_num 
     LEFT OUTER JOIN PRODUCT_DETAIL with (nolock) ON 
     PRODUCT_DETAIL.s_num = PRODUCT.s_num  
      WHERE 
      ( 
       CATALOGITEM.publish_code = 'upd' OR 
       CATALOG_ITEM.publish_code = 'ins' OR 
       PRODUCT.publish_code = 'upd' OR 
       PRODUCT.publish_code = 'ins' 
      ) 

     and 
     (CATALOG.unit_id = bu.unit_id) 

如何在LINQ写这个查询。

请指教。

+0

将附加条件移到'where'。顺便说一句 – 2010-06-07 09:55:36

+0

,最好使用SQL操作'IN':'.. WHERE CATALOGITEM.publish_code IN( 'UPD '插件')或PRODUCT.publish_code IN(' UPD”, '插件')' – abatishchev 2010-06-07 10:02:36

回答

2

假设您缺少到PRODUCT表的连接?

无论如何,这应该让你开始。

var query = (from ci in db.catalogitem 
     join c in db.catalog on ci.catalog_id equals c.catalog_id 
     join p in db.products on ci.s_num equals p.s_num 
     join pd in db.productdetail on p.s_num equals pd.s_num into tempprods 
     from prods in tempprods.DefaultIfEmpty() 
     where !(c.catalog_id.Contains(21, 20)) 
     && (ci.publish_code.Contains('upd','ins')) || 
      (p.publish_code.Contains('upd','ins')) 
     select ci) 
+0

Thanks.Actually这是查询的一小部分。查询也包含许多左外连接。如何执行abt。 更新了原来的问题。 – SNA 2010-06-07 10:39:38

+0

答复已更新。为了将来,建议你自己试试。我给了你一些指导并回答了原始问题,只有学习的方法是采取一些例子并为自己尝试。 – RPM1984 2010-06-07 11:27:49

0

如果你想保留(NOLOCK)提示,我有blogged a handy solution在C#中使用扩展方法。请注意,这与向查询中的每个表添加nolock提示相同。