将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子句添加到具有通用列名的linq查询中

您必须使用表达式树动态创建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;
}