LINQ Group By IF声明

时间:2014-03-30 17:17:26

标签: c# sql linq

我有一个页面,可由具有多个角色的用户访问。角色是:

我是镇 ii)区 iii)国家

如果用户具有角色' Town',则他与城镇相关联,例如洛杉矶。如果用户具有角色'区',则他与区域相关联,例如加利福尼亚。如果用户具有角色'国家',则他与国家/地区相关联,例如USA。

现在我知道洛杉矶不是一个城镇,而是一个城市,加利福尼亚不是一个地区而是一个州。我只提供了这些示例来帮助您了解数据的结构。

每个角色都可以查看多个文档。文档与例如财务,基础设施等。

现在,我有一个SP从数据库中获取整个数据。然后我想使用LINQ对数据进行分组。我想做这样的事情:

GROUP BY Role
             --> GROUP BY Section
                                --> GROUP BY Document
                                                   --> IF ROLE is Town --> GROUP BY Town (e.g. Los Angeles)
                                                   --> IF ROLE is District --> GROUP BY District (e.g. California)
                                                   --> IF ROLE is Country --> GROUP BY Country (e.g. USA)

使用LINQ是否可以包含if语句的最后一部分?如果是的话,你能给我一个语法的简短例子吗?我正在使用查询语法。提前谢谢。

1 个答案:

答案 0 :(得分:1)

你可以继承角色

的班级(城镇,国家和州)
public enum typeRoleEnum
{
   country = 0,
   state = 1,
   town = 2
}

public class Role {
    public string name { get; set; }
    public typeRoleEnum type { get; set; }
}
public class Town: Role {}
public class District : Role { }
public class Country : Role { }
Role中的

名称是每个类共有的属性,包含州,城镇或国家/地区的名称。只有在这样的属性上,你才能按照分组。

比创建像这样的对象列表

List<Role> list = new List<Role>();

Role rol1 = new Town() { name = "Town1", type = typeRoleEnum.town  }; 
Role rol2 = new Town() { name = "Town2", type = typeRoleEnum.town  };
Role rol3 = new Town() { name = "Town2", type = typeRoleEnum.town  };

list.Add(rol1);
list.Add(rol2);
list.Add(rol3);

在这里,您必须知道您要创建的类型列表 查询将是

var t = from l in list
    group l by l.name into grp
select grp.Key;

可能在这种情况下你有一个查询但if语句在你的代码的其他位置,当你必须创建列表时

你只能使用角色类型的类吗?这可能是一个更好的解决方案,除非三个类必须具有不同的行为,并且您只需要通过共同属性分组