C# C语言中列表选择的谓词问题#
我有一个curry类型的Lambda表达式,我希望它能够执行选择并派生一个惟一的元素。遗憾的是,存在一个运行时异常 代码如下:C# C语言中列表选择的谓词问题#,c#,.net,lambda,predicate,C#,.net,Lambda,Predicate,我有一个curry类型的Lambda表达式,我希望它能够执行选择并派生一个惟一的元素。遗憾的是,存在一个运行时异常 代码如下: Entities relation = queryType( "test-instances", (new KeyValuePair<String, String>("cycle-id", testSetID)) ); Entity target = (relation.entities.To
Entities relation = queryType(
"test-instances",
(new KeyValuePair<String, String>("cycle-id", testSetID))
);
Entity target = (relation.entities.ToList<Entity>()).Find(
//select entity with field 'name'
e => (e.fields.Find(
//and with non-epsillon value
f => !(f.values.Find(
//of value 'targetValue'
v => (v.value.Equals(targetValue))
).value.Equals(""))
)).name.Equals("name")
);
函数parsePredicate()
获取对(),并将它们编码为服务器理解的语言的谓词
例外情况是在最内部的函数中;绑定变量v
作为null
应用e
tof
虽然有效,但我使用的数据模型是可靠的
有什么想法吗
以下是实体的类
:
public class Entities
{
public List<Entity> entities{get;set;}
public long totalResults{get;set;}
public Entities(){entities = new List<Entity>();}
}
public class Entity
{
public List<Field> fields { get; set; }
public Entity() { fields = new List<Field>(); }
}
public class Field
{
public String name { get; set; }
public List<Value> values { get; set; }
public Field() { values = new List<Value>(); }
}
public class Value
{
public String value{get;set;}
}
公共类实体
{
公共列表实体{get;set;}
公共长totalResults{get;set;}
公共实体(){Entities=new List();}
}
公共类实体
{
公共列表字段{get;set;}
公共实体(){fields=new List();}
}
公共类字段
{
公共字符串名称{get;set;}
公共列表值{get;set;}
公共字段(){values=new List();}
}
公共阶级价值
{
公共字符串值{get;set;}
}
如果没有完整的示例,很难判断发生了什么。我个人会使用LINQ而不是列表。请注意,查找…@JonSkeet观察AMMENDENT;关系的类型为Entities这仍然不是一个。我们不能仅仅从这件事上重现这个问题。(您确定问题不在于relation.entities.ToList()
返回的实体没有填写字段值吗?@JonSkeet是的,我确定。如果我展示了这个关系是如何推导出来的,它是否完整?为什么你们不能提供一个完整的例子?我看不出用硬编码数据(不一定是真实数据)创建一个示例并显示代码失败有什么困难。作为诊断工作的一部分,你很可能会自己找到答案。(顺便说一句,我强烈建议您也开始遵循.NET命名约定。)
public class Entities
{
public List<Entity> entities{get;set;}
public long totalResults{get;set;}
public Entities(){entities = new List<Entity>();}
}
public class Entity
{
public List<Field> fields { get; set; }
public Entity() { fields = new List<Field>(); }
}
public class Field
{
public String name { get; set; }
public List<Value> values { get; set; }
public Field() { values = new List<Value>(); }
}
public class Value
{
public String value{get;set;}
}