2014-09-05 67 views
1

我有一個表說具有以下字段類別:選擇特定的子記錄在LINQ to SQL的C#

CAT_ID,cat_name和Cat_desc

我也有另一臺產品與下列字段:

pro_id,CAT_ID,pro_name和pro_desc,is_finished

通常情況下,如果我選擇一個類別與LINQ to SQL中,它返回與所有相關的產品類別。

但是我想要選擇一個類別,但返回的產品應該只是產品的is_finished值是真的。

任何建議/代碼示例將不勝感激。

+0

你不想把它設置爲True或只得到那個是真的? – 2014-09-05 16:59:34

+0

我想獲得具有is_finished值true的關聯產品的類別。 – 2014-09-05 17:01:41

+0

您是否在尋找至少有一個成品的所有類別?在這種情況下看看任何運算符 – Pleun 2014-09-05 18:50:12

回答

1

您需要join表:

select * from product p 
left join Category c on c.cat_id = p.cat_id 
where c.cat_name = 'yourcategory' and p.is_finished = 1 

在LINQ to SQL:

var query = from product in products 
      join category in categories on category.cat_id = product.cat_id 
      select new { product.is_finished = true, category.cat_name = "yourcategory" }; 
+0

謝謝你的迴應,但我不使用行內的SQL,我正在尋找一種方法來實現這與LINQ到SQL對象。 – 2014-09-05 16:59:49

+0

@ Al-Mustapha我的答案是LINQ到SQL ... – ElGavilan 2014-09-05 17:00:39

+0

@ElGavilan:你的LINQ與你的SQL不匹配。你正在使用'select'語句,你應該使用where語句。 – StriplingWarrior 2014-09-05 20:01:47

0

這可能是你在問什麼是最明智的辦法:

var query = from product in products 
      select new { 
       product, 
       finishedCategories = product.categories.Where(c => c.is_finished) 
      }; 

這會創建一個匿名類型,其中包含您正在查找的數據。請注意,如果您訪問.product.categories,您仍然可以獲得該產品的所有類別(延遲加載)。但是,如果您使用.finishedCategories,您只需獲得已完成的類別。

+0

我理解並非常感謝您的回覆。顯然,我要求的太多了,因爲我希望修改它的產品類別本身,使其具有真正的is_finished。 – 2014-09-05 17:59:06

+0

@ Al-Mustapha這個答案和我留下的答案完全相同。這可能是最好的方法。不確定斷開連接的位置在哪裏...... – ElGavilan 2014-09-05 18:19:14

+0

@ Al-Mustapha:你要求做的事情可能是個壞主意,就是這樣。比方說,你將某個'產品'傳遞給某個輔助方法,並且該輔助方法需要對產品的所有類別進行一些操作:無法知道該特定'產品'是否被加載到「特殊「的方式,所以只有某些類別存在。相反,重新考慮你的設計,並願意在這種情況下引入DTO層。從長遠來看,您的代碼不易出錯並且更易於維護。 – StriplingWarrior 2014-09-05 20:00:14