gpt4 book ai didi

c# - 使用 linq 从具有字段名称和字段值的列表中选择(类似于 select 命令)

转载 作者:太空宇宙 更新时间:2023-11-03 10:21:51 25 4
gpt4 key购买 nike

我想从一个动态列表中选择,其中列表字段名称是例如“SecName”,SecName 值等于例如“xxx”,我知道如何在 sql 中创建它,但我想通过 Entity Framework 创建和使用它。就像在 sql 中执行字符串一样。我怎样才能在 Entity Framework 和 linq.应该是这样的

var lst=_efmodel.Tables.where(x=>x.fieldname=="SecName" && x.value=="xxx").tolist();

我正在寻找通过传递两个字符串来过滤我的列表的语法,第一个字符串应该是属性名称,另一个应该是该属性值。

最佳答案

经过搜索我找到了答案,答案是:

     public class SearchField
{
public string Name { get; set; }
public string @Value { get; set; }
//public string Operator { get; set; }

public SearchField(string Name, string @Value)
{
this.Name = Name;
this.@Value = @Value;
//Operator = "=";
}
}
public class FilterLinq<T>
{
public static Expression<Func<T, Boolean>> GetWherePredicate(params SearchField[] SearchFieldList)
{

//the 'IN' parameter for expression ie T=> condition
ParameterExpression pe = Expression.Parameter(typeof(T), typeof(T).Name);

//combine them with and 1=1 Like no expression
Expression combined = null;

if (SearchFieldList != null)
{
foreach (var fieldItem in SearchFieldList)
{
//Expression for accessing Fields name property
Expression columnNameProperty = Expression.Property(pe, fieldItem.Name);


//the name constant to match
Expression columnValue = Expression.Constant(fieldItem.Value);

//the first expression: PatientantLastName = ?
Expression e1 = Expression.Equal(columnNameProperty, columnValue);

if (combined == null)
{
combined = e1;
}
else
{
combined = Expression.And(combined, e1);
}
}
}

//create and return the predicate
if (combined != null) return Expression.Lambda<Func<T, Boolean>>(combined, pe);
return null;
}

}

并像这样使用它:

var lst = _efmodel.Count(2015).AsQueryable()
.Where(
FilterLinq<PazTedad_Result>.GetWherePredicate(
new SearchField("FieldName", "FieldValue"))).ToList();

关于c# - 使用 linq 从具有字段名称和字段值的列表中选择(类似于 select 命令),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33196383/

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