将where子句添加到具有通用列名的linq查询中
本文关键字:linq 查询 子句 where 添加 | 更新日期: 2023-09-27 18:27:24
只有在泛型类型表上有列的情况下,我才想向linq查询添加where子句。
代码示例:此函数对模型中的所有表都是通用的。我想为所有有"AccountId"列的选项卡添加where条件。
public IQueryable RetrieveAll(params Expression>[] eagerProperties) {
var entitySet = ResolveEntitySet(typeof(T));
var query = context.CreateQuery<T>(entitySet);
foreach (var e in eagerProperties)
{
query = query.Expand(e);
}
var type = typeof(T);
var account = type.GetProperty("AccountId");
if(account!=null)
{
query = query.where(x=>x...)
}
return query
我需要之类的东西
Guid g = new Guid("3252353h....")
query.where(x=>x.AccountId == g)
感谢
您必须使用表达式树动态创建Where谓词,查看下面的代码:
public static IQueryable<T> RetrieveAll<T>(params Expression[] eagerProperties)
{
var type = typeof(T);
var entitySet = ResolveEntitySet(type);
var query = context.CreateQuery<T>(entitySet);
foreach (var e in eagerProperties)
{
query = query.Expand(e);
}
var account = type.GetProperty("AccountId");
if (account != null)
{
Guid g = new Guid("3252353h....");
var parameter = Expression.Parameter(type);
var property = Expression.Property(parameter, account);
var guidValue = Expression.Constant(g);
var lambdaPredicate = Expression.Lambda<Func<T, bool>>(Expression.Equal(property, guidValue), parameter);
return query.Where(lambdaPredicate);
}
return query;
}