如何在LINQ表达式中包含条件替换?

时间:2013-11-28 21:26:23

标签: linq entity-framework linq-to-sql linq-to-entities

我有一个LINQ表达式,其中一部分是:

Select(x => new SelectListItem
            {
                Text = x.Child.RoleName,
                Value = x.Child.RoleName
            })

我希望测试Rolename,如果它包含某个值,则返回一个特定的字符串,例如:

Select(x => new SelectListItem
            {
                Text = x.Child.RoleName.contains("Admin")?"Admin Account":"Not Admin",
                Value = x.Child.RoleName
            })

请原谅伪代码,但如果它包含“管理员”,则返回“管理员帐户”,否则返回“非管理员”,以获取下拉列表的“文本”属性。

代码应该是什么样的?

提前致谢。

修改

我还需要添加其他测试,即

role.Contains("test1))? test1 :  role.Contains("test2")?"Test2":role.Contains("Test3")?"Test3":"Test4"

1 个答案:

答案 0 :(得分:1)

如果您将C中的Contains变为大写,则应该按照发布时的方式进行操作。

要解决您的其他问题,您有两种选择。

选项#1:Stack?:这样的运算符:

Text = x.Child.RoleName.Contains("Admin") ? "Admin Account" : x.Child.RoleName.Equals("Banana") ? "Banana" : "Something Else"

选项#2:由于上述内容可能很快变得难看,您可能更愿意将逻辑分解为单独的函数。然后你可以这样做:

Text = CalculateText(x.Child.RoleName)

String CalculateText(String rolename)
{
    if(rolename.Contains("Admin"))
        return "Admin Account";
    else if(rolename.Equals("Banana"))
        return "Banana";
    else
        return "Something Else";
}