条件泛型实体框架中的equals子句

时间:2017-05-08 19:03:06

标签: c# entity-framework linq lambda

我正在尝试创建一个where子句,我可以在func和属性中传递然后比较它们。我有一长串我需要比较的不同属性,所以我想要一个扩展方法来包装它。

以下是我想要使用它的方法:

string transactionNumber = "12345";
Queryable<TranCard> transactions = _context.TranCard
    .WhereEquals(t => t.TransactionNumber, transactionNumber)
    .ToList();

以下是我目前所遇到的导致我出现问题的扩展方法:

public static IQueryable<T> WhereEquals<T>(this IQueryable<T> source, Func<T, string> expression, string queryParam)
    {
        return source.Where(t => string.IsNullOrWhiteSpace(queryParam)
                                 || expression != null
                                 && string.Equals(queryParam.Trim(), expression.Invoke(t).Trim(), StringComparison.OrdinalIgnoreCase));
    }

当我尝试运行它时,它会抛出以下运行时错误消息: “为方法调用提供的参数数量不正确'Boolean Equals(System.String,System.String,System.StringComparison)'”

1 个答案:

答案 0 :(得分:1)

我能够通过分离呼叫来使其工作。这也让它更容易阅读!

public static IQueryable<T> WhereEquals<T>(this IQueryable<T> source, Func<T, string> expression, string queryParam)
    {
        if (string.IsNullOrWhiteSpace(queryParam))
        {
            return source;
        }

        return source.Where(x => expression(x).Trim().ToLower() == queryParam.Trim().ToLower());
    }

感谢大家的帮助!