带开关盒的吸气功能?

时间:2011-11-29 14:04:55

标签: c# asp.net

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查询中使用了一个字符串,但我已经尝试解决它但无法弄明白该怎么做。

2 个答案:

答案 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;
}