带开关的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查询中使用字符串,但我试过解决它,但无法弄清楚如何做。

带开关的Getter函数

在本文中,作者解释了如何使用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;
}