gpt4 book ai didi

c# - 使用通用列名将 where 子句添加到 linq 查询

转载 作者:行者123 更新时间:2023-12-04 13:46:23 25 4
gpt4 key购买 nike

我只想在泛型类型表上有列的情况下向 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;
}

关于c# - 使用通用列名将 where 子句添加到 linq 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34379377/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com