使用四张桌子。
用户 -> 具有基本的用户信息,包括用户 ID 和部门 ID (int)
组 -> 基本组信息,包括组 ID
GroupsMembers -> 表具有组与其成员之间的关系,多对多关系,因此 groupid 和 userid 是列
部门 -> 基本部门信息,包括 deptid
我有一个从用户表中的部门 id 到部门表中的部门 id 的 fk。
从组 groupid 到组成员 groupid 的 FK
从用户 userid 到组成员 userid 的 FK
这允许 edmx 中的组拥有用户导航属性,该属性将包含该组的所有成员。
var grp = grpSource.FirstOrDefault(g => g.GroupID == groupID)
if (grp.GroupID > 0)
{
var userQuery = from u in grp.Users
where !u.Deleted
select u;
userQuery = userQuery.OrderBy(u => u.Department.Name);
}
我包括 Users.Department。
问题的出现是因为用户不必拥有部门,因此departmentid 列可以为空。如果存在任何部门 ID 为空的用户,则 orderby 会中断并显示 u.Department 为空。如果没有部门 ID 为空,则效果很好。我需要一种基于 Department.Name 进行排序的方法,即使存在空的 Departmentid。有什么建议么?
您可以使用条件运算符来检查部门是否为 null :
userQuery = userQuery.OrderBy(u => (u.Department != null) ? u.Department.Name : String.Empty);
为了提高清晰度,我创建了以下扩展方法:
public static TResult IfNotNull<TSource, TResult>(this TSource obj, Func<TSource, TResult> selector, TResult defaultValue)
{
if (obj != null)
return selector(obj);
return defaultValue;
}
它可以按如下方式使用:
userQuery = userQuery.OrderBy(u => u.Department.IfNotNull(d => d.Name, String.Empty));
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)