Linq OrderBy 因导航属性为 null 而中断

2024-01-07

使用四张桌子。

用户 -> 具有基本的用户信息,包括用户 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(使用前将#替换为@)

Linq OrderBy 因导航属性为 null 而中断 的相关文章

  • 学习实体框架[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 如何使用 LINQ to Entities 调用带返回值的 Oracle 函数?

    我正在开发一个从 Oracle 11g 数据库访问数据的应用程序 我使用的是 EF4 并且使用 LINQ 访问数据 我遇到过一个场景 我需要调用存储在包中的函数 这个函数也有一个返回值 我已将此函数添加到实体数据模型中 但无法对其执行 添加
  • 实体框架服务层更新 POCO

    我正在使用Service Layer gt Repository gt Entity Framework Code First w POCO objects方法 我在更新实体方面遇到了困难 我正在使用 AutoMapper 将域对象映射到视
  • Nullable 是不可能的,为什么不呢? [复制]

    这个问题在这里已经有答案了 如果这是一个愚蠢的问题 请原谅 我正在尝试更好地理解 Net 中的 Nullable 类型 从我从 Microsoft 源代码 使用 ReSharper 中注意到的内容 我了解到 Nullable 是一个结构 而
  • 如何在 EF Core 2.1 中定义外键关系

    我的 DAL 使用 EF Core 2 1 这就是我的模型的样子 一名用户只能拥有一种角色 Role entity kind of master public class Role public int RoleId get set pub
  • 使用 IdentityDbContext 和 Code First 自动迁移表位置和架构的实体框架?

    我正在尝试使用 IdentityDbContext 类设置自动迁移更新 并将更改传播到整个数据库的实际 DbContext 在进入代码之前 在使用自动迁移实现 IdentityDbContext 时 我收到此错误 影响迁移历史系统表位置的自
  • 播种多对多数据

    您好 我正在尝试为我的项目创建一些种子 但我在将多对多关系数据播种到数据库时遇到问题 My database看起来像这样 in 教师技能 教师ID and Skill ID当然是他们的表的外键 My seeder看起来像这样 protect
  • 抽象类型 X 没有映射的后代,因此无法映射

    我有以下模型 public abstract class AbstractBase public abstract class AbstractBase
  • 实体框架 - 外键上的双向一对一关系

    我有两个实体 例如 Hat 和 Owner Owner Hat 0 1 1 ID ID Name Size HatId OwnerId 每个主人都有他的帽子 有些帽子没有主人 我创建了模型 public class Owner Key pu
  • 使用实体框架从集合中删除项目

    我正在使用DDD 我有一个 Product 类 它是一个聚合根 public class Product IAggregateRoot public virtual ICollection
  • 限制实体框架中子实体的数量

    底线在前 有没有一种简洁的方法可以限制可以属于实体框架中父级的子实体的数量 我现在使用的是4 3 1 问题 我正在开发一个 ASP NET MVC3 站点 它通过使用实体框架的数据访问层访问数据 我有一个 SearchList 实体 它与搜
  • 如何在没有互联网连接的情况下安装 NuGet 包?

    目前我正在一台不允许访问互联网的虚拟电脑上进行开发 我设法获取 NuGet Tools vsix 将 NuGet 添加到 Visual Studio 2010 但似乎无法找出如何离线部署 NuGet 包 例如 我下载了EntityFrame
  • 实体框架 4 DB 优先依赖注入?

    我更喜欢创建自己的数据库 设置索引 唯一约束等 使用 edmx 实体框架设计器 从数据库生成域模型是轻而易举的事 现在我有兴趣使用依赖注入来设置一些存储库 我查看了 StackOverflow 上的一些文章和帖子 似乎重点关注代码优先方法
  • 处理与不同相关实体的一对多的正确模式

    我有一个 C 项目 我使用实体框架作为 ORM 我有一个User 可以向多家银行付款 每家银行都是一个独立的实体 并且每家银行都由不同的字段描述 问题是 一User可以没有或有很多不同的Banks 我不太确定如何对此进行建模 临时解决方案是
  • 从类型获取 DbSet

    我正在尝试为 MVC 6 应用程序制作通用表查看器 编辑器 我目前使用 Context GetEntityTypes 返回给我一份表格列表 现在我需要获取特定类型的数据 我当前的实现是 On my context public IQuery
  • 从客户端访问 DomainService 中的自定义对象

    我正在使用域服务从 Silverlight 客户端的数据库中获取数据 在DomainService1 cs中 我添加了以下内容 EnableClientAccess public class Product public int produ
  • 防止更新 ASP.NET MVC 和实体框架中未更改的值

    我正在使用 ASP NET MVC 和实体框架 我有一个 编辑人员 网页 可以在其中编辑人员的字段 然后在回发操作中 我使用以下代码 var person objectCtx Persons Where s gt s Id id First
  • SimpleMemership CreateUserAndAccount 自定义

    我正在尝试添加一个新属性UserProfile我的模型中的类 public class UserProfile Key DatabaseGeneratedAttribute DatabaseGeneratedOption Identity
  • 实体框架 SQLite 错误 1:“没有这样的表:__EFMigrationsHistory”

    我在 Windows 和 Linux 上运行 EF Core 并且在两者上都遇到相同的问题 public string DbPath get string DbPath Environment GetFolderPath Environme
  • 混合模型优先和代码优先

    我们使用模型优先方法创建了一个 Web 应用程序 一名新开发人员进入该项目 并使用代码优先方法 使用数据库文件 创建了一个新的自定义模型 这 这是代码第一个数据库上下文 namespace WVITDB DAL public class D

随机推荐

  • 如何向接口添加委托 C#

    我的班上需要有一些代表 我想使用该界面来 提醒 我设置这些委托 How to 我的班级是这样的 public class ClsPictures myInterface Implementing the IProcess interface
  • 如何刷新天气层?

    有谁知道是否有办法刷新 Google 地图 javascript API 中的天气层 为了提供一些背景知识 我们有一个应用程序 它在浏览器中保持打开状态 并每隔几分钟更新地图上的一些信息 我们让用户在地图上打开天气图层 但天气仅在创建图层时
  • 如何在android中测试应用内订阅

    我已成功将应用内购买 api v3 集成到我现有的应用程序中 我还在 google play 中创建了应用程序订阅 并在代码中添加了订阅 ID 在 Google 开发者网站中 我读到要测试应用程序购买 我们需要在 设置 部分添加电子邮件 I
  • 无需连接WiFi即可获取MAC地址

    是否可以在未实际连接的情况下获取 WiFi MAC 地址 假设我有 Android 设备 A 我已经打开了 WiFi 因此我的 Android 设备现在能够检测到附近广播的 WiFi SSID 我附近有一些广播的 WiFi SSID 如下所
  • 遍历范围,将字符串附加到每个范围

    我在 Google 表格 activerange 中选择了一系列单元格 我想迭代该范围内的每个单元格 并在末尾添加一个字符串 该字符串始终相同 并且可以硬编码到函数中 这似乎是一件非常简单的事情 但我已经搞乱了代码一个小时了 但无法发生任何
  • 以有限度数旋转表盘

    All 我想要以特定角度旋转图像 如下图所示 我有旋转代码 但它旋转 360 度 但我只想要特定的度数 并获取表盘上侧的选定数字 下面是我的代码 我的自定义视图工作正常 但性能不佳 import android content Contex
  • 在更新值时扩展 numpy 数组

    我有一个具有形状的 numpy 数组 1 m 和每个条目 n 是0 9之间的整数 我想创建一个具有形状的新矩阵 m 10 其中 除了第 n 列为 1 之外 所有条目均为 0 例如 2 3 1 gt 0 0 1 0 0 0 0 1 0 1 0
  • 更改winform应用程序中所有表单的背景颜色

    我有像这样的基本表单类 它继承自类 public partial class BaseForm Form protected override void OnLoad EventArgs e Color colBackColor Prope
  • 如何在 CIL 中声明值类型:`.class value` 还是只是 `.class`?

    我看过 C struct FooStruct in ILDASM http msdn microsoft com en us library f7dy01k1 aspx 并看到以下内容 ILDASM 此处显示两个不同的声明 一个开始于 cl
  • 如何从 Router 组件以外的组件访问路由参数

    在 React router 1 0 2 0 中 可以通过以下方式访问路由参数 this props params来自 Route 组件 但似乎没有受支持的方法来从上述 Route 组件中深层包含的组件访问参数 可以通过以下方式访问数据类型
  • 在 Typescript 中重新导出类

    我在两个文件中有两个类 a ts export class A b ts export class B 我如何构建文件c ts我可以从中导入这两个类 import A B from c 代替 import A from a import B
  • 直接调用和通过 shell 脚本调用时的“echo -e”

    我发觉到echo直接调用时的行为略有不同 root echo line1 nline2 当通过脚本调用时 bin sh echo line1 nline2 第一个案例将打印 line1 nline2 而后者会打印 line1 line2 S
  • 如何删除以子字符串结尾且超过N天的文件

    我想要delete早于以下时间的无扩展名文件7名字结尾为的日子 C 示例文件 B C A1 C B C A2 C B C A3 A test txt My code SET mypath cd downloads ForFiles p my
  • 查找 xpath 开头的 webelement

    我正在尝试使用 Selenium Webdriver 查找链接 我不想通过链接文本找到它 只想通过输入的实际链接来找到它 这可以通过使用 Selenium 的 find element by xpath 方法来完成 但是当我只知道该 hre
  • 将SecurityContext注入Symfony2中的监听器prePersist或preUpdate以获取createBy或updatedBy中的User会导致循环引用错误

    我设置了一个侦听器类 在其中我将在任何 prePersist 学说上设置 Ownerid 列 我的 services yml 文件看起来像这样 services my listener class App SharedBundle List
  • MySQL - BETWEEN 运算符与 FLOAT(10,6) 的作用类似于 > 和 <,而不是 >= 和 <=

    我有一张带有位置纬度和经度的表格 我成功地使用了 BETWEEN 子句 直到遇到搜索值与数据库中的值相同的情况 在这些情况下 它不会返回结果 这是一个示例 其中 SELECT Location latitude Location longi
  • 如何在 Ubuntu 上的 MonoDevelop 中使用 System.Windows.Forms?

    我在工作之初就遇到了这个问题 我正在使用 Mono 2 10 和 MonoDevelop 2 8 当我创建一个新的 C 项目时 我无法使用 using System Windows Forms 因为这里没有这样的命名空间 我搜索了一些答案并
  • 在新选项卡中打开生成的 pdf 文件而不是下载..Web API

    Net 4 6 1 C 我在运行时生成了一个pdf文件并且可以成功下载 我想在新选项卡中打开新创建的 pdf 文件 而不是下载它 这是我的代码 Web API 2 1 方法 public HttpResponseMessage ToPDF
  • 使用 Dapper 自动映射输出参数

    我一直在使用 Dapper 来调用存储过程 并向其传递一个对象 例如 如果我有一个对象 public int ID get set public int Year get set 我可以创建这个对象并将其传递给我的Execute作为参数调用
  • Linq OrderBy 因导航属性为 null 而中断

    使用四张桌子 用户 gt 具有基本的用户信息 包括用户 ID 和部门 ID int 组 gt 基本组信息 包括组 IDGroupsMembers gt 表具有组与其成员之间的关系 多对多关系 因此 groupid 和 userid 是列部门