使用四个表格。
用户 - >具有基本用户信息,包括用户ID和离开(int)
群组 - >基本组信息包括groupid
GroupsMembers - >具有组与其成员之间关系的表,多对多关系,因此groupid和userid是列
部门 - >基本部门信息,包括deptid
我有一个来自users表中的departmentid的fk到departments表中的deparmtnet id。
FK从groupidid到groupsmembers groupid FK从用户userid到groupsmembers userid
这允许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列可以为空。如果有任何用户为departmentid为null,则orderby中断并表示u.Department为null。如果没有离开是空的,那就很有效。我需要一种基于Department.Name进行排序的方法,即使有null的离开。有什么建议吗?
答案 0 :(得分:45)
您可以使用条件运算符来检查部门是否为空:
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));
答案 1 :(得分:0)
如何使用coalesce运算符?
userQuery = userQuery.OrderBy(u => u.Department.Name ?? string.Empty);