Linq:选择分组列表

时间:2011-06-24 15:26:40

标签: c# linq

我开始使用Linq,认为这是解决问题的正确方法,但不知道如何解决以下问题:

我有一个从数据库表中填充的数据集。 它包含如下数据

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

因此,我希望像cat一样的字典作为键,将分组值作为列表

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

我怎么能用linq达到这个目标,还是有更好的方法?

3 个答案:

答案 0 :(得分:1)

List<?> getByKey(TypeOfCAT input)
{
    return context.yourTable.Where(i => i.CAT == input).Select(i=>i.Value).ToList();
}
如果填写,

应该有用吗?和TypeOfCAT

答案 1 :(得分: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");
}

答案 2 :(得分:0)

var resultAsDictionary = myDataSet.Rows.Cast<DataRow>().ToDictionary(e => e["CAT"].ToString(), e => e["VALUE"].ToString())
那是你想要的吗?我只是猜测你的数据模型,所以我可能误解了一些东西。