我有一个页面,可由具有多个角色的用户访问。角色是:
我是镇 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语句的最后一部分?如果是的话,你能给我一个语法的简短例子吗?我正在使用查询语法。提前谢谢。
答案 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语句在你的代码的其他位置,当你必须创建列表时
你只能使用角色类型的类吗?这可能是一个更好的解决方案,除非三个类必须具有不同的行为,并且您只需要通过共同属性分组