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;
}
我正在尝试使用switch case为我的所有字段创建一个getter,否则我将不得不创建很多setter(此处显示的案例多于此处)。但是当我尝试返回结果时,它表示它是一个字符串,而不是一个用户。我想这是因为我在LINQ查询中使用了一个字符串,但我已经尝试解决它但无法弄明白该怎么做。
答案 0 :(得分:5)
在this article中,作者解释了如何使用Dynamic Query Library (download)实现与您类似的操作。
答案 1 :(得分:2)
使用参数User创建一个Func并返回一个bool。然后根据需要使用的字段创建此Func。当你调用where时,传递这个创建的Func。
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;
}