0

我正在尝试解决与我问过C# 的上一个问题类似的问题 - 传递函数以派生对象属性作为参数,但用于使用实体框架

private IQueryable<Foo> Query(Query query)
{
    string[] searchTerms = query.CsvData.Replace(" ", "").ToLower().Split(',');

    switch (query.Type)
    {
        case QueryType.Name:
            return dbContext.Foos.Where(ByName(query.Exclude, searchTerms));

        case QueryType.Street:
            return dbContext.Foos.Where(ByStreet(query.Exclude, searchTerms));
    }
}

我有以下两个功能

private Expression<Func<Foo, bool>> ByName(bool _exclude, string[] _searchTerms)
{
    if (_exclude)
    {
        return x => !_searchTerms.Contains(x.Name.Replace(" ", "").ToLower());
    }

    return x => _searchTerms.Contains(x.Name.Replace(" ", "").ToLower());
}

private Expression<Func<Foo, bool>> ByStreet(bool _exclude, string[] _searchTerms)
{
    if (_exclude)
    {
        return x => !_searchTerms.Contains(x.Address.Street.Replace(" ", "").ToLower());
    }

    return x => _searchTerms.Contains(x.Address.Street.Replace(" ", "").ToLower());
}

哪个工作正常,但是对于所有不同的属性都有很多重复的代码要搜索。我想通过传入属性字符串来进行通用查询,从而使其更通用。

另一个问题很好地回答了直接 linq,但我希望能够在 linq-to-sql 中实现这一点

我必须建立自己的自定义表达式吗?

4

0 回答 0