gpt4 book ai didi

使用字段名称作为变量的 C# Linq 查询数据库

转载 作者:搜寻专家 更新时间:2023-10-30 22:12:50 25 4
gpt4 key购买 nike

这是我的代码。谁能帮我重构这段代码。我正在尝试使用字段名称作为变量,这样我就不必使用 switch case 了。类似于 dr in db.Users where dr.FieldName.Contains(value)

public static List<User> GetUser(string value, string fieldName)
{
var db = new CCPTDataContext();
var users = new List<User>();

switch (fieldName)
{
case "FirstName":
users = (from dr in db.Users where dr.FirstName.Contains(value)
select new User
{
Username = dr.Username,
FirstName = dr.FirstName,
LastName = dr.LastName
}).ToList();

break;
case "LastName":
users = (from dr in db.Users where dr.LastName.Contains(value)
select new User
{
Username = dr.Username,
FirstName = dr.FirstName,
LastName = dr.LastName
}).ToList();
break;
}
return users;
}

最佳答案

您必须使用 System.Linq.Expression 命名空间中的类手动创建表达式树:

public static Expression<Func<TSource, bool>> GetPropertyContainsValueExpression<TSource>(string propertyName, string value)
{
var param = Expression.Parameter(typeof(TSource), "x");
var prop = Expression.Property(param, propertyName);
var valueExp = Expression.Constant(value, typeof(string));
var contains = Expression.Call(prop, "Contains", null, valueExp);
return Expression.Lambda<Func<TSource, bool>>(contains, param);
}

然后你就可以这样使用了:

public static List<User> GetUser(string value, string fieldName)
{
var db = new CCPTDataContext();

return db.Users.Where(GetPropertyContainsValueExpression<User>(fieldName, value)).ToList();
}

关于使用字段名称作为变量的 C# Linq 查询数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21169478/

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