Наружный от:
dict
- это последовательность KeyValuePairs
, где ключом является int
, а значением является внутреннее Dictionary<string, dynamic>
. Следовательно, id
- это один элемент из этой последовательности KeyValuePairs: это один из таких KeyValuePair.
Внутренний из:
id.Value
- это Dictionary<string, dynamic>
, который представляет собой строку KeyValuepairs, где каждый Ключ - это строка, и каждое значение равно Dynami c.
. Вы не хотите, чтобы все KeyValuePairs из внутреннего словаря, вам нужны только некоторые из них:
where (info.Key == "marks1" && Convert.ToDouble(info.Value) > 10)
&& (info.Key == "marks2" && Convert.ToDouble(info.Value) > 20)
Если я прочитайте это, вы хотите, чтобы только те KeyValuePairs из внутреннего словаря со строкой Key, равной "marks1", а также равным "marks2". Вы уверены, что хотите этого? Мне кажется, что результатом будет пустая коллекция.
Увы, вы не написали свои требования, поэтому я должен догадаться.
Я думаю, что из каждого элемента KeyValuePair из вашего внешнего словаря вы хотите получить ключ (который является int из вашего внешнего словаря), а также все последовательности всех KeyValuePairs из внутреннего словаря, которые имеют либо
- (Key == "marks1) «AND Convert.ToDouble (info.Value)> 10)
- ИЛИ (Key ==« marks2 »И AND Convert.ToDouble (info.Value)> 20)
I ' Я не очень знаком с синтаксисом запроса, поэтому вместо него я буду использовать methodSyntax.
Dictionary<int, Dictionary<string, dynamic>> dict = ...;
var result = dict.Select( outerKeyValuePair => new
{
Key = outerKeyValuePair.Key,
Values = outerKeyValuePair.Value
// I don't want all values from the inner dictionary
// I only want those where (Key == "marks1" and ...) OR (Key == "marks2 and ...)
.Where(innerKeyValuePair =>
(innerKeyValuePair.Key == "marks1" && Convert.ToDouble(innerKeyValuePair.Value) > 10)
||
(innerKeyValuePair.Key == "marks2" && Convert.ToDouble(innerKeyValuePair.Value) > 20))
// from the remaining inner KeyValuePairs select the properties that you want
.Select(innerKeyValuePair => new
{
Name = innerKeyValuePair.Key,
Value = innerKeyValuePair.Value,
})
.ToList(),
});
Словом: ваш внешний словарь - это последовательность внешних KeyValuePairs. Из каждого keyValuePair в этой последовательности создайте один новый объект, содержащий два свойства: Key
и Values
.
Свойство Key
является ключом от вашей KeyValuepair.
The Values
свойства это список. Он содержит объекты, сделанные из внутреннего словаря, который принадлежит значению Key из внешнего словаря.
Этот внутренний словарь также является последовательностью KeyValuePairs. Я сохраняю только некоторые из этих внутренних KeyValuePairs, а именно только те, в которых:
- Ключ равен "marks1" И И Convert.ToDouble (значение) больше, чем 10
- ИЛИ: Ключ равен "marks2" И Convert.ToDouble (значение) больше 20
Из каждого оставшегося KeyValuePair из внутреннего словаря я создаю один новый объект, содержащий свойства Name
и Value
.
Name
- это ключ внутренней KeyValuePair (которая равна «marks1» или «marks2») Value
- это значение этой внутренней KeyValuePair.
Конечно, если вы хотите другие свойства, вы можете выбрать их вместо тех, что я выбрал:
.Select(innerKeyValuePair => new
{
Marks = innerKeyValuePair.Key, // equals "marks1" OR "marks2"
Value = Convert.ToDouble(innerKeyValuePair.Value),
})
.ToList(),