【发布时间】:2012-10-22 17:43:36
【问题描述】:
所以我有一个使用实体框架 LINQ 构建的查询。取决于搜索参数和被搜索参数的类型。
我已经创建了一个这样的函数:
public static IQueryable<T> WhereInt<T>(this IQueryable<T> query, string propertyName, string contains)
{
var parameter = Expression.Parameter(typeof(T), "type");
var propertyExpression = Expression.Property(parameter, propertyName);
MethodInfo method = typeof(string).GetMethod("First");
var someValue = Expression.Constant(contains, typeof(string));
var containsExpression = Expression.Call(propertyExpression, method, someValue);
return query.Where(Expression.Lambda<Func<T, bool>>(containsExpression, parameter));
}
这样使用:
WhereInt(DCs, searchfield, search);
searchfield 可以是用户 ID、用户名、整数或字符串,理想情况下我想这样做:
searchfield.value == search.toInt32()
某种功能。
我还想让DateTime 类型也可搜索。也许我会为此创建一个WhereDateTime。
var containsExpression = Expression.Call(propertyExpression, method, someValue); 出现错误
这适用于字符串,但失败并出现错误:
Value cannot be null.
Parameter name: method
【问题讨论】:
-
string 没有名为
First的方法,这就是 GetMethod("Firts") 返回 null 的原因。你想做什么。您能否提供样本输入和预期结果 -
@RuneFS 我想做的是有一个这样的函数:query.Where(SearchField, SearchType, SearchValue);所以我做了两个函数,一个 WhereInt 和一个 WhereString,我输入 SearchField 和 SearchValue,我试图让它返回正确的值(对 int 使用相等操作“==”,或者对字符串使用 .Contains() )
-
也许我错误地使用了“First”,我在 WhereString 中使用了“Contains”...我将 Contains 更改为“First”,希望这与使用 == 一样LINQ。
-
这个表达式仍然让我感到困惑
typeof(string).GetMethod("First")你说你想比较整数但正在寻找一个字符串方法,你期望 1.First(someVariable) 返回什么?
标签: linq entity-framework linq-to-entities iqueryable