我有一个员工代码A-B-C-D-
。现在我想搜索所有以A-开头的记录,直到它富有A-B-C-D-。我试过下面的代码:
var result = db.Employee.Where(x=> x.EmployeeCode.StartsWith("A-B-C-D-"));
上面的代码只给我一条记录。但我希望所有记录以A-
开头,然后A-B-
然后A-B-C-
,然后等于A-B-C-D-
。
任何提示或想法都表示赞赏。
答案 0 :(得分:1)
你试过这个吗?
var result = db.Employee
.Where(x=> x.EmployeeCode.StartsWith("A-")
|| x.EmployeeCode.StartsWith("A-B-")
|| x.EmployeeCode.StartsWith("A-B-C-")
|| x.EmployeeCode.StartsWith("A-B-C-D-");
正如你在评论中所说,它必须是动态的,然后做这样的事情:
string code = "A-B-C-D-";
var predicates = new List<Expression<Func<Customer,bool>>>();
for (int i = 0; i < code.Length; i++)
{
if (code[i] == '-')
{
var prefix = code.Substring(0, i + 1);
predicates.Add(x => x.EmployeeCode.StartsWith(prefix));
}
}
var oredPredicates = ...; // Keep reading!
...
var result = db.Employee.Where(oredPredicate);
现在,你有一个谓词的lis,并且必须将它们与||
(或)结合起来。要做到这一点有点混乱,但有解决方案,例如在这个SO Q&amp; A&#39中:
将所有谓词组合后,将其用作.Where()
函数的参数。
不幸的是,组合表达式最复杂的部分是不可避免的,而且它是解决这个问题最棘手的部分,但它确实有效。请阅读3 Q&amp; A,了解您正在做的事情并获取最适合您的代码(请注意使用简单的Expression.OrAlso
不会直接起作用,因为每个lambda中的x
param对于每个创建的表达式都是不同的)