2011-11-14 178 views
2

我有兩個表格,它們之間存在一對多關係,並且希望執行一個linq查詢,該查詢將從多個表中獲取值並生成逗號分隔列表來自與另一個表中的每個記錄相關的值。我可以使用「stuff」函數和「for xml path」函數在sql中執行此查詢。例如,假設我有以下表結構:使用linq將列表中的逗號分隔列表轉換爲列

1)區
列:ID,名稱
2)店鋪
列:ID,姓名,districtid

現在假設我想生成查詢返回以下列: district.id,district.name,stores(與本區關聯的商店的逗號分隔列表)

這怎麼能通過linq實現?

我想這樣做沒有任何for循環,在一個查詢中。

回答

5

其他答案考慮到你有導航屬性。 如果是這種情況,你應該看看其他答案,因爲在這種情況下,其他答案要簡單得多。

var result = 
    from d in Districts 
    // gets all the store names in this district 
    let st = Stores.Where(s => s.DistrictId == d.Id).Select(s => s.Name) 
    select new { Name = d.Name, Id = d.Id, Stores = string.Join(",", st) } 
+0

這可能更簡單了...但是如果數據有「或者,那麼它將不起作用......也還是n發表前面和後面的報價 –

0

假設你有導航屬性:

var q = from d in context.Districts 
select new 
{ 
    DistrictID = d.id, 
    DistrictName = d.name, 
    Stores = String.Join(", ", d.stores.Select(s => s.name)) 
}; 
0

如果您正在使用LINQ到SQL,那麼你必須已經具有導航屬性創建你的ORM類,然後你可以運行下面的代碼(我推測商店因LINQ中的多元化而變成了Store_s_等):

var req = from dis in db.Disticts 
      select new { 
         ID = dis.id, 
         Name = dis.Name, 
         Stores = 
         String.Join(", ", 
         dis.Stores.Select(a => String.Format("{0}: {1}", a.Id, a.Name)) 
         }; 
+0

我試過這個變化。 SELECT語句似乎返回IEnumerable,因爲Join似乎返回string []。有什麼額外的,我需要做的。 – user927777

+0

String.Join()應該返回一個「連接」的字符串,而不是一個數組...你可以發佈你的變體? –

+0

沒關係..我明白了。謝謝。 – user927777

相關問題