gpt4 book ai didi

c# - where 条件下的动态列

转载 作者:行者123 更新时间:2023-11-30 20:23:35 24 4
gpt4 key购买 nike

在我的场景中,我想查询一个包含用户选择的列名的表。因此,每次 where 条件的列名都会发生变化,因此我尝试使用 lambda 查询查询。

我完全不知道该怎么做,请帮我解决这个问题。或者建议是否有任何其他方法可以做到这一点?

string[] criteria = searchCriteria.Split('_');
var columnName = criteria[0];
var columnValue = criteria[1];

var subQry = (from e in ctx.tblEmployee
where (e.DateOfJoining <= startDate || (e.DateOfJoining.Value.Month == ApplyMonth && e.DateOfJoining.Value.Year == ApplyYear)) &&
monInputEmployee.Contains(e.Id) == flag
select new
{
e.Id,
e.Code,
e.FName,
e.DateOfJoining
}).ToList();

var eParam = Expression.Parameter(typeof(EmployeeDetail), "e");
var comparison = Expression.And(
Expression.Equal(Expression.Property(eParam, columnName), Expression.Constant(columnValue)),
Expression.Equal(Expression.Property(eParam, "CompId"), Expression.Constant(compId)));

var lambda = Expression.Lambda<Func<EmployeeDetail, bool>>(comparison, eParam);
var mainQry = subQry.Where(lambda);

最佳答案

这是有用的文章 Build Where Clause Dynamically in Linq看看 PredicateBuilder乔·阿尔巴哈里 (Joe Albahari) 着。您可以使用 PredicateBuilder 重写您的 Where 子句,如下所示:

配偶您有 SearchCriteria 模型。

Public class SearchCritera 
{
public DateTime? DateOfJoining { get; set; }
public int? CompanyId { get; set; }
public int? CategoryId { get; set; }
public EmployeeStatus? EmpStatus { get; set; }
}

var whereClause = PredicateBuilder.True<tblEmployee>();
if (searchCriteria.CompanyId.HasValue)
whereClause = whereClause.And(r => r.CompanyId == searchCriteria.CompanyId);

if (searchCriteria.CategoryId.HasValue)
whereClause = whereClause.And(r => r.Category == searchCriteria.CategoryId);

if (searchCriteria.CategoryId.HasValue)
whereClause = whereClause.And(r => r.EmpStatus == searchCriteria.EmpStatus);

if (searchCriteria.DateOfJoining.HasValue)
{
var dateClause1 = PredicateBuilder.True<tblEmployee>();
dateClause1.And(r => r.DateOfJoining <= searchCriteria.DateOfJoining);

var dateClause2 = PredicateBuilder.True<tblEmployee>();
dateClause2.And(r => re.DateOfJoining.Value.Month == searchCriteria.DateOfJoining.Month);
dateClause2.And(r => re.DateOfJoining.Value.Year == searchCriteria.DateOfJoining.Year);
dateClause1.Or(dateClause2);

whereClause.And(dateClause1)
}

var result = ctx.tblEmployee.AsExpandable().Where(whereClause);

关于c# - where 条件下的动态列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28575879/

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