2011-06-24 71 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"); 
}