我开始使用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达到这个目标,还是有更好的方法?
答案 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())
那是你想要的吗?我只是猜测你的数据模型,所以我可能误解了一些东西。