【发布时间】:2015-01-30 07:43:02
【问题描述】:
专家!
遇到一个(对某人来说可能很简单)问题。
我有一个对象:
public class DataItem {
public string Title { get; set; }
public string ID { get; set; }
public Dictionary<String, Object> Values { get; set; }
}
我需要做的是从“Caml like”Xml 动态构建 linq .Where。在 Xml 解析中,我使用 switch 来构建 linq 谓词:
switch (Type) {
case CriteriaType.Contains:
break;
case CriteriaType.Eq:
break;
...
并使用 PredicateBuilder(来自C# 5.0/4.0 in a Nutshell)来组合表达式,但事情是我不知道如何构建表达式谓词,例如更大或相等。 想法是具有如下功能:
public Expression<Func<DataItem, bool>> Geq<T>(String field, Object value)
DataItem 是我们要查询的对象,T 是 Dictionary 项目的值类型,参数 field 是 的键DataItem.Values 字典和 value 是这个键的值。
但这里有一个问题:
- 由于我们使用对象进行操作,因此应将它们转换为类型 .
-
而且由于我们不确定 DataItem.Values 集合是否具有键 我们需要,表达式应该构建为 linq 等价于
p => p.Values.ContainsKey(field) && p.Values[field] >= value
如果有人能帮我解决这个问题,那就太棒了。
另外,我将非常感谢您提供一些不错的教程和链接,其中包含 “易于理解” 示例。
【问题讨论】: