带开关的Getter函数
本文关键字:函数 Getter 开关 | 更新日期: 2023-09-27 18:16:10
public User getByField(string field, string stringToFilter)
{
string fieldToReturn;
switch (field)
{
case "id":
fieldToReturn = "u.pk_user_id";
break;
case "username":
fieldToReturn = "u.user_username";
break;
}
var result = (from u in dc.Users
where fieldToReturn == stringToFilter
select fieldToReturn).Single();
return result;
}
我试图创建一个getter为我所有的字段使用一个开关情况,因为否则我将不得不创建很多setter(有更多的情况比这里显示)。但是当我尝试返回结果时,它说它是一个String,而不是User。我想这是因为我在linq查询中使用字符串,但我试过解决它,但无法弄清楚如何做。
在本文中,作者解释了如何使用Dynamic Query Library(下载)实现类似的操作。
创建一个参数为User的Func并返回bool值。然后根据需要使用的字段创建这个函数。当你调用where时,传递这个创建的函数
public User getByField(string field, string stringToFilter)
{
Func<User, bool> wherePred = null;
switch (field)
{
case "id":
wherePred = u => u.pk_user_id == stringToFilter;
break;
case "username":
wherePred = u => u.user_username == stringToFilter;
break;
}
var result = dc.Users.Where(wherePred).Single();
return result;
}