我正在尝试创建一个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)'”
答案 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());
}
感谢大家的帮助!