2010-06-07 76 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提示相同。