У меня есть словарь структуры, где один элемент представляет собой список, содержащий различные элементы, применимые к каждому элементу словаря.
Я хотел бы объединить эти элементы с каждым элементом, чтобы отфильтровать их и/или сгруппировать по элементам.
В SQL я знаком с объединением таблиц/запросов для получения нескольких строк по желанию, но я новичок в C#/Linq. Поскольку «столбец» может быть объектом/списком, уже связанным с соответствующими элементами словаря, интересно, как я могу использовать их для выполнения соединения?
Вот пример структуры:
name elements
item1 list: elementA
item2 list: elementA, elementB
Мне нужен запрос, который дает этот вывод (count = 3)
name elements
item1 elementA
item2 elementA
item2 elementB
В конечном счете, сгруппировав их следующим образом:
element count
ElementA 2
ElementB 1
Вот мой код начинает подсчет элементов словаря.
public struct MyStruct
{
public string name;
public List<string> elements;
}
private void button1_Click(object sender, EventArgs e)
{
MyStruct myStruct = new MyStruct();
Dictionary<String, MyStruct> dict = new Dictionary<string, MyStruct>();
// Populate 2 items
myStruct.name = "item1";
myStruct.elements = new List<string>();
myStruct.elements.Add("elementA");
dict.Add(myStruct.name, myStruct);
myStruct.name = "item2";
myStruct.elements = new List<string>();
myStruct.elements.Add("elementA");
myStruct.elements.Add("elementB");
dict.Add(myStruct.name, myStruct);
var q = from t in dict
select t;
MessageBox.Show(q.Count().ToString()); // Returns 2
}
Редактировать: мне не нужен вывод в виде словаря. Я использовал его для хранения своих данных, потому что он хорошо работает и предотвращает дублирование (у меня есть уникальное имя элемента, которое я храню как ключ). Однако с целью фильтрации/группировки я думаю, что это может быть список или массив без проблем. Я всегда могу сделать .ToDictionary, где key = item.Name впоследствии.