2011-06-24 32 views
3

私はLINQのを使用し、それは私の問題を解決する正しい方法だと思うし始めていますが、次のように取り組むのか分からない:のLINQ:グループ化された選択リスト

私はから充填されたデータセットを持っていますDBテーブル。 それは、私がキーと猫と

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

は、どのように私は、LINQでこれに達することができるリストとしてグループ化された値またはと辞書のような何かをしたい、結果として、以下の

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

などのデータが含まれていますもっと良い方法がありますか?

答えて

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

は入力してください。 TypeOfCAT

+0

VAR結果= datatable.Where(I => I .CAT == "2")。(i => i.VALUE).ToList();を選択します。あなたが言ったように働いた:-) THX –

0

var resultAsDictionary = myDataSet.Rows.Cast<DataRow>().ToDictionary(e => e["CAT"].ToString(), e => e["VALUE"].ToString())
これはあなたが望むものですか?私はあなたのデータモデルだけを推測しているので、私は何か誤解しているかもしれません。

+0

thx、しかし、あなたのコードは、2番目のエントリが起こったときにキーが既に埋め込まれているので、リストが欠けていたので助けになりませんでした... –

1

検索にはうまく収まります。次のようにあなたがEnumerable.ToLookupメソッドを使用することができます。

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またはあなたがこのような方法でアプローチを変更することができ、空の文字列をチェックするには:

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"); 
} 
関連する問題