Я хочу отфильтровать List
с использованием Linq Where/Select
, используя значение ключей в Dictionary
, как показано в программе, мое текущее решение имеет ряд ограничений.Отфильтровать список, используя ключи словаря
Dictionary
относится к пользовательскому вводу из пользовательского интерфейса, поэтому он может содержать набор значений вместо одного значения для заданного ключа.
Любой указатель, который поможет мне в правильном направлении.
public class Business
{
public int ID { get; set; }
public string NAME { get; set; }
}
void Main()
{
var businessList = new List<Business>
{
new Business {ID = 1,NAME = "A"},
new Business {ID = 1,NAME = "B"},
new Business {ID = 1,NAME = "C"},
new Business {ID = 2,NAME = "D"},
new Business {ID = 2,NAME = "E"},
new Business {ID = 2,NAME = "F"},
new Business {ID = 3,NAME = "G"},
new Business {ID = 4,NAME = "H"},
new Business {ID = 4,NAME = "I"},
new Business {ID = 4,NAME = "J"},
new Business {ID = 5,NAME = "K"},
new Business {ID = 5,NAME = "L"}
};
var filterDictionary = new Dictionary<string, object>
{
{"ID",3},
{"NAME","G"}
};
Expected Result:
ID Name
3 G
var filterDictionary = new Dictionary<string, object>
{
{"ID",new List<int>(){2,3}}
};
Expected Result:
ID Name
2 D
2 E
2 F
3 G
Current Solution:
var result = businessList
.Select(x => filterDictionary.ContainsKey(typeof(Business).GetProperty("ID").Name) ?
x.ID == (int)filterDictionary[typeof(Business).GetProperty("ID").Name] ? x : null : null
)
.Where(x => x!= null)
.Select(x => filterDictionary.ContainsKey(typeof(Business).GetProperty("NAME").Name) ?
x.NAME == (string)filterDictionary[typeof(Business).GetProperty("NAME").Name] ? x : null : null
);
}
Что такое ожидаемый результат? бизнес-объекты, имеющие ID = 3 AND Name = G? Или у вас есть ID = 3 OR Name = G? Может ли словарь содержать более двух элементов? –
Результат должен быть комбинацией значений, то есть ID = 3 AND Name = G здесь. Да, он может содержать ключи, которые не являются частью бизнес-объекта в небольшом углу, но теперь я был бы рад предположить, что словарь может содержать только допустимые ключи. –
Но что это значит, в этом случае иметь три или четыре элемента в словаре? Например, что, если словарь содержит следующее: ID = 2, ID = 4, NAME = E? NAME = H? –