LINQ to SQL查询帮助(字符串包含字符串数组中的任何字符串)

Liv*_*er9 6 c# lambda linq-to-sql

我一直在用这个撕掉我的头发.我有一系列搜索术语,我正在尝试使用LINQ to SQL查询来搜索数组中每个项目的字段值.

我到目前为止..

var searchResults = 
    from x in SDC.Staff_Persons
    where staffTermArray.Any(pinq => x.Forename.Contains(pinq))
        || staffTermArray.Any(pinq => x.Surname.Contains(pinq))
        || staffTermArray.Any(pinq => x.Known_as.Contains(pinq))
    orderby x.Surname
    select x;
Run Code Online (Sandbox Code Playgroud)

......但是后来了

除Contains()运算符外,本地序列不能用于查询运算符的LINQ to SQL实现

......现在我被卡住了.

如果有人可以提供帮助,我将非常感激.提前致谢.

Ste*_*ven 6

我不确定这是否是最简单的解决方案,但这将有效:

var filter = CreateFilter(staffTermArray);

var searchResults = 
    from person in SDC.Staff_Persons.Where(filter)
    orderby person.Surname
    select person;



private static Expression<Func<Staff_Person, bool>> CreateFilter(
    string[] staffTermArray)
{
    var predicate = PredicateBuilder.False<Staff_Person>();

    foreach (var staffTerm in staffTermArray)
    {
       // We need to make a local copy because of C# weirdness.
       var ping = staffTerm;

       predicate = predicate.Or(p => p.Forename.Contains(ping));
       predicate = predicate.Or(p => p.Surname.Contains(ping));
       predicate = predicate.Or(p => p.Known_as.Contains(ping));
    }

    return predicate;
}
Run Code Online (Sandbox Code Playgroud)

您需要使用PredicateBuilder来实现此功能.