LINQ to SQL查询帮助(字符串包含字符串数组任何字符串) [英] LINQ to SQL query help (string contains any string in string array)

查看:1184
本文介绍了LINQ to SQL查询帮助(字符串包含字符串数组任何字符串)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我一直在撕裂我的头发与这一个。我有搜索词的数组,我试图做一个LINQ到SQL查询来搜索字段值对数组中的每个项目。

I've been tearing my hair out with this one. I've got an array of search terms and I'm trying to do a LINQ to SQL query to search field values against each item in the array.

我得到这个远..

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;



...但随后得到了

... but then got

本地顺序不能在LINQ
可以用来除载有()
运营商

Local sequence cannot be used in LINQ to SQL implementation of query operators except the Contains() operator

...现在我卡住了。

... and now I'm stuck.

如果有人可以帮助我会非常感激。
先谢谢了。

If anyone can help I'd be very grateful. Thanks in advance.

罗布

推荐答案

我不敢肯定,如果这是最简单的解决方案,但是这将工作:

I'm not sure if this is the easiest solution, but this will work:

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;
}

您将需要的 PredicateBuilder 为此工作。

这篇关于LINQ to SQL查询帮助(字符串包含字符串数组任何字符串)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆