2011-06-24 70 views
3

我開始使用Linq,並認爲這是解決我的問題的正確途徑,但不知道如何處理以下內容:的LINQ:選擇分組名單

我是從一個裝滿數據集數據庫表。 它包含像下面

CAT VALUE 
c1 NULL or "" 
c2 a 
c2 b 
c3 x 
c4 y 
c4 z 

結果數據,我想要的東西,像貓的關鍵和分組值列表

giving: 
_pseudoFunction_.getByKey(c2) => List with a,b 
_pseudoFunction_.getByKey(c1) => nothing 

我怎麼能與LINQ達到這個或字典還有更好的方法嗎?

回答

1
List<?> getByKey(TypeOfCAT input) 
{ 
    return context.yourTable.Where(i => i.CAT == input).Select(i=>i.Value).ToList(); 
} 

應該工作,如果你填寫?和TypeOfCAT

+0

VAR的結果= datatable.Where(I =>我.CAT ==「2」)。Select(i => i.VALUE).ToList();按照你所說的:-) THX –

0

var resultAsDictionary = myDataSet.Rows.Cast<DataRow>().ToDictionary(e => e["CAT"].ToString(), e => e["VALUE"].ToString())
這就是你想要的嗎?我只是猜測你的數據模型,所以我可能誤解了一些東西。

+0

thx,但是你的代碼沒有幫助,因爲當第二個條目發生時鍵已經被填滿,名單丟失... –

1

查找很適合。

var query = table.ToLookup(o => o.CAT, o => o.Value); 

// specific key: c2 
foreach (var item in query["c2"]) 
{ 
    Console.WriteLine(item); 
} 

// all items 
foreach (var item in query) 
{ 
    Console.WriteLine("Key:" + item.Key); 
    foreach (var value in item) 
    { 
     Console.WriteLine(value); 
    } 
} 

檢查null或空字符串,您可以修改這樣的方法:你可以按如下方式使用Enumerable.ToLookup方法

if (query["c1"].Any(o => !String.IsNullOrEmpty(o))) 
{  
    foreach (var item in query["c1"]) 
    { 
     Console.WriteLine(item); 
    } 
} 
else 
{ 
    Console.WriteLine("No valid results for c1"); 
}