我有两个这样的班级
public class Error{
public string Code{get;set;}
public string Description{get;set;}
}
public class Row{
public List<Error> Errors {get;set;}
....
}
所以,对于每一行,可以存在更多的错误。是否可以使用动态 linq 选择具有错误代码(例如 Code1)的行?
因此,如果该行包含 Code1 和 Code2,我想选择该行。
如果在下面的示例中查询有一个行列表,我想要这样的查询
query.Where("Errors != null && Errors.Code.contains('Code1')")
是否可以使用动态 linq 选择具有错误代码(例如 Code1)的行?
按照我的理解,你有这样的事情
IQueryable<Row> query = ...;
string code = "Code1";
并且您需要与以下静态查询等效的动态 LINQ:
var result = query
.Where(row => row.Errors != null && row.Errors.Any(error => error.Code == code));
由于在动态 LINQ 中,每个Enumerable
扩展方法 lambda 都进入一个单独的“范围”,因此可以通过特殊it
标识符或根本没有标识符来访问内部成员。此外,它允许你传递参数和使用索引来引用他们的查询字符串里面@p0
,@p1
等
因此,上面等效的动态 LINQ 查询可能是这样的:
var result = query
.Where("Errors != null && Errors.Any(Code == @0)", code);
如果不是您想要的完全匹配string.Contains
,只需替换Code == @0
为Code.Contains(@p0)
.
当然,您可以将字符串文字值嵌入其中,但请记住,它需要用双引号 ( "
)括起来:
var result = query
.Where("Errors != null && Errors.Any(Code == \"Code1\")");
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句