使用列值c#中的代码模式搜索记录

时间:2015-04-21 07:47:40

标签: c# linq entity-framework sql-server-2012 linq-to-entities

我有一个员工代码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-

任何提示或想法都表示赞赏。

1 个答案:

答案 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对于每个创建的表达式都是不同的)