【发布时间】:2010-11-21 05:57:21
【问题描述】:
在我之前关于使用动态构建的字符串(where 子句)并在 LINQ 中使用它们的一个问题中,我被引导到 LINQ 动态查询库 Dynamic LINQ。
第一个问题是它只适用于 IQueryable,但是可以通过在任何 IEnumerable 上使用 .AsQueryable() 扩展方法来克服这个问题。
我遇到的问题是 Dynamic LINQ 正在我的字典中寻找一个名为“CustomerID”的属性(或传递给动态 linq 的字符串谓词的任何内容)。这显然行不通,因为字典只有键和值。
所以认为我很聪明,我创建了一个扩展 : Dictionary<string, object> 的类,ICustomTypeDescriptor`。
这让我可以覆盖类型上的GetProperties()。这是伟大的。我现在可以迭代 Dictionary 键并将它们添加到返回的 PropertyDescriptorCollection。
但后来我遇到了另一个问题。在整个动态 LINQ 库中,它们使用仅包含类型的“表达式实例”。但是为了使我的CustomTypeDescriptor 解决方案能够正常工作,我需要一个类型的实际实例,然后才能应用TypeDescriptor.GetProperties(instance, false)。
所以进入实际问题。考虑到上述所有信息,如果数据存储在具有键值对的字典中,我如何将字符串格式“CustomerID=1234 AND Quantity >= 10000”的自定义 where 子句应用于 LINQ 查询。
我当前的解决方案是将数据转换为DataTable 并使用.Select(query) 方法。哪个有效,但我有兴趣寻找其他解决方案。尤其是用于基准测试。
有什么想法吗?
【问题讨论】:
标签: c# linq dictionary properties types