1

我正在努力尝试编写 LINQ 查询来执行以下操作,

public class MyClass
{
    public int ID {get; set;}
    public int Name {get; set;}
    public IEnumerable<string> SomeIEnumerable {get; set;}
}

我正在尝试使用 LINQ 从 DB 查询中创建对象,该查询将返回如下内容,

ID    Name     SomeString
0     NameA    "MyValue"
1     NameB    "Value1"
1     NameB    "Value2"
2     NameC    "Value"

LINQ 也很容易编写,

from DataRow row in dataSet.Tables[0].Rows
select new MyClass
{
    ID = (int)row["ID"],
    Name = row["Name"].ToString(),
    SomeIEnumerable = new List<string>{ row["SomeString"].ToString() }
};

棘手的部分是我如何把它变成字典 where dictionary[1].SomeIEnumerable = {"Value1", "Value2"}

一个简单的 ToDictionary 会抛出一个ArgumentException

这里的主要问题是我如何处理键不明确的事实,并且能够在临时字典中查找现有值以添加我感兴趣的值。

4

3 回答 3

3

而不是打电话ToDictionary,打电话ToLookup。:)

于 2012-05-15T11:03:00.537 回答
2

您也可以将您的分组,然后使用 IGrouping 检索组中的项目列表

示例代码

    var simulatedData = Enumerable.Range(0,10).Select(x=> new {Key=x%3+1, Index=x}); 
    var dict = simulatedData.GroupBy(x=>x.Key).ToDictionary(x=>x.Key, x=>x.Select(t=>t.Index));
于 2012-05-15T11:22:10.937 回答
1

感谢@Tilak的回答是,

from DataRow row in dataSet.Tables[0].Rows
group row by new
{
    ID = (int) row["ID"],
    Name = row["Name].ToString()
} into rowGroup
select new MyClass
{
    ID = rowGroup.Key.ID,
    Name = rowGroup.Key.Name,
    SomeIEnumerable =
        from row in rowGroup
        select row["SomeString"].ToString()
};
于 2012-05-15T11:44:52.440 回答