linq - LINQ for LIKE查询数组元素

标签 linq arrays linq-to-sql

假设我有一个数组,我想对varchar进行LINQ查询,该查询返回在varchar中任何位置具有数组元素的任何记录。

这样的事情会很甜蜜。
string[] industries = { "airline", "railroad" } var query = from c in contacts where c.industry.LikeAnyElement(industries) select c
有任何想法吗?

最佳答案

实际上,这是我在“Express Yourself”演示文稿中使用的一个示例,该示例在常规LINQ中很难做到;据我所知,最简单的方法是手动编写谓词。我使用下面的示例(请注意,它对于StartsWith等同样适用):

    using (var ctx = new NorthwindDataContext())
    {
        ctx.Log = Console.Out;
        var data = ctx.Customers.WhereTrueForAny(
            s => cust => cust.CompanyName.Contains(s),
            "a", "de", "s").ToArray();
    }
// ...
public static class QueryableExt
{
    public static IQueryable<TSource> WhereTrueForAny<TSource, TValue>(
        this IQueryable<TSource> source,
        Func<TValue, Expression<Func<TSource, bool>>> selector,
        params TValue[] values)
    {
        return source.Where(BuildTrueForAny(selector, values));
    }
    public static Expression<Func<TSource, bool>> BuildTrueForAny<TSource, TValue>(
        Func<TValue, Expression<Func<TSource, bool>>> selector,
        params TValue[] values)
    {
        if (selector == null) throw new ArgumentNullException("selector");
        if (values == null) throw new ArgumentNullException("values");
        if (values.Length == 0) return x => true;
        if (values.Length == 1) return selector(values[0]);

        var param = Expression.Parameter(typeof(TSource), "x");
        Expression body = Expression.Invoke(selector(values[0]), param);
        for (int i = 1; i < values.Length; i++)
        {
            body = Expression.OrElse(body,
                Expression.Invoke(selector(values[i]), param));
        }
        return Expression.Lambda<Func<TSource, bool>>(body, param);
    }

}

关于linq - LINQ for LIKE查询数组元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/698379/

相关文章:

c# - 使用 linq 将一对多关系转换为查找

javascript - 如何使用 typescript 向数组添加额外的属性

xml - LINQ to XML 在标记之间生成\r\n?

c# - 如何对包含动态对象的列表进行排序

arrays - 谷歌大查询 : Table join with REPEATED RECORD values

sql - LINQ:计算多列中真正 bool 值的数量

c# - sql查询如何在Linq中转换

c# - 一个表有两个模型对象是 LINQ-to-SQL/Entity Framework 的常见做法吗?

linq - LINQ订购依据以选择最低的索引

javascript - ES6 Map 或 array : need first, last, previous, next, 在 TypeScript 中获取(混合数组和 Map)