Словарь LINQ Неопределенные значения

Я немного борюсь с попыткой написать запрос LINQ, чтобы сделать следующее,

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

Я пытаюсь создать объект с помощью LINQ из запроса к БД, который будет возвращать что-то следующим образом,

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() }
};

Сложная часть - как мне превратить это в словарь, где словарь [1].SomeIEnumerable = {"Value1", "Value2"}

Простой ToDictionary будет бросать ArgumentException

Основная проблема здесь заключается в том, как мне справиться с тем фактом, что ключ не различен, и иметь возможность искать во временном словаре существующее значение, чтобы добавить к нему интересующие меня значения.

3 ответа

Решение

Вы также можете создать свою группу, а затем использовать 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));

Вместо звонка ToDictionary, вызов ToLookup,:)

Ответ, благодаря @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()
};
Другие вопросы по тегам