В одном из моих предыдущих вопросов об использовании динамически создаваемых строк (где-либо) и их использовании в LINQ я направлялся к библиотеке динамических запросов LINQ Dynamic LINQ .
Первая проблема заключалась в том, что она применяется только к IQueryable, однако это можно преодолеть с помощью метода расширения .AsQueryable () в любом IEnumerable.
Проблема, с которой я столкнулся, заключалась в том, что Dynamic LINQ ищет Свойство с именем «CustomerID» (или все, что было передано в строковый предикат для динамического linq) в моем Словаре. Что, очевидно, не сработает, поскольку в словаре есть только ключи и значения.
Поэтому, думая, что я умен, я создал класс, расширяющий : Dictionary<string, object>
, ICustomTypeDescriptor`.
Это позволило мне переопределить GetProperties()
для типа. Что здорово. Теперь я могу перебрать ключи словаря и добавить их в PropertyDescriptorCollection
, который возвращается.
Но потом я столкнулся с другой проблемой. Во всей динамической библиотеке LINQ они работают с «экземпляром выражения», который содержит только тип. Но чтобы мое CustomTypeDescriptor
решение работало, мне нужен фактический экземпляр типа, прежде чем я смогу применить TypeDescriptor.GetProperties(instance, false)
.
Итак, перейдем к актуальному вопросу. Принимая во внимание всю вышеуказанную информацию, как применить пользовательское предложение where в строковом формате "CustomerID = 1234 AND Количество> = 10000" к запросу LINQ, если данные хранятся в словаре с парами ключ-значение.
Мое текущее решение заключается в преобразовании данных в DataTable
и использовании метода .Select(query)
. Что работает, но я заинтересован в поиске других решений. Специально для целей бенчмаркинга.
Есть идеи?