执行两个LINQ IQueryable的OR

rea*_*ers 3 linq entity-framework linq-to-sql

我有两个IQueryables:

    public static IQueryable<Counterparty> SearchByCode(this IQueryable<Counterparty> queryable, string searchQuery)
    {
        return queryable.Where(x => x.Code.StartsWith(searchQuery.ToUpper()));
    }

    public static IQueryable<Counterparty> SearchByName(this IQueryable<Counterparty> queryable, string searchQuery)
    {
        return queryable.Where(x => x.Name.ToLower().Contains(searchQuery.ToLower()));
    }
Run Code Online (Sandbox Code Playgroud)

我想创建另一个IQueryable,它将两个查询组合为OR例如

    public static IQueryable<Counterparty> SearchByCodeOrName(this IQueryable<Counterparty> queryable, string searchQuery)
    {
        // return SearchByName(searchQuery) OR SearchByCode(searchQuery)
    }
Run Code Online (Sandbox Code Playgroud)

我宁愿避免重复代码,所以我想重用现有的可查询而不是重写一个新的lambda表达式 Where(x=> x.Code.StartsWith.... || x.Name.Contains.....)

Obl*_*000 5

你可以将两者的结果联合起来

public static IQueryable<Counterparty> SearchByCodeOrName(this IQueryable<Counterparty> queryable, string searchQuery)
{
     return SearchByName(searchQuery).Union(SearchByCode(searchQuery))
}
Run Code Online (Sandbox Code Playgroud)