繁体   English   中英

实体框架中的条件泛型“等于”子句

[英]Conditional generic Where equals clause in Entity Framework

我正在尝试创建一个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)的调用提供了不正确的参数数量”“

通过分离出电话,我能够使它正常工作。 这也使它更容易阅读!

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

感谢大家的帮助!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM