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 而中断 的相关文章

  • .NET 5 EF Core SaveChangesAsync 因错误而挂起

    尽管这个问题有很多结果 但没有一个真正给我明确的答案 每次我尝试通过 AddAsync 和 SaveChangesAsync 方法插入错误数据 例如重复的主键 时 我都会看到以下日志 执行 DbCommand 失败 15 毫秒 我还在 SQ
  • 我可以将 UseCSharpNullComparisonBehavior 用于单个查询吗?

    我有一个查询 该查询曾经是存储过程 现已转换为 EF 查询 现在已经超时了 使用 SQL Profiler 我可以看到生成的 SQL 的唯一区别是 EF 转变的新行为entity Property value into entity Pro
  • 如何修改 edmx 的默认代码生成策略?

    我想修改默认的代码生成策略 该怎么做 我只是想修改类名 lt code Escape container gt to Entities并将默认连接字符串更改为name Default 我不想为该项目创建模板文件 我想编辑它以便它可以在全球范
  • 无法将类型 System.Linq.IQueryable 隐式转换为字符串

    我有两个名为 Rank 和 CrewMembers 的表 我想根据 CrewMember 的 id 获取 Rank 表中存在的排名名称 我已将船员 ID 作为参数传递 并在此基础上该方法将返回该特定船员的等级 这就是我的代码 public
  • EF 5.0 中的链接 OR 条件

    我将以此为序言 我正在积极寻找这个问题的解决方案 但我想 如果堆栈上有人已经解决了这个问题 我可能会缩短一些研究和开发时间 我在网上没有找到任何东西 所以这里是 我们正在构建的应用程序框架中有一个案例 我们需要能够接受一组谓词 List
  • 实体框架代码优先查找与 SingleOrDefault(预加载)

    我正在使用 Entity Framework 4 2 代码优先 来访问我的数据库 我假设如果我使用查询一个实体SingleOrDefault如果实体尚未被跟踪 它只会查询数据库 但情况似乎并非如此 这Find另一方面 方法似乎确实在这样做
  • 如何通过实体键添加/删除与实体框架的多对多关系?

    I tried using Entities e new Entities EntityKey key new EntityKey Entities Users UserId 20 User user new User EntityKey
  • WCF - 将空元素转换为可为空的本机类型

    将 SOAP 字段元素留空会导致本机类型出现强制转换错误 遗憾的是 由于客户端限制 无法使用 xsi nil true 将 WCF 协定本机类型标记为 nullable 似乎不足以阻止将以下错误返回给客户端 字符串 不是有效的布尔值 在 S
  • 大表的最佳主键格式

    我正在开发一个 ASP NET 应用程序 它有一些可能很大的数据表 我想知道定义主键的最佳方法是什么 我知道以前已经有人问过这个问题 但由于这是针对特定情况的 所以我认为这个问题是有效的 我在 SQL Server 2008 数据库上使用实
  • 默认情况下 dbo 架构中的 EF 6 Code First __MigrationHistory

    我是代码优先实体框架的新手 第一次运行我的应用程序后登录数据库时 当我看到 MigrationHistory 表时 我有点困惑 我现在了解对此表的需求 但不喜欢它位于用户表内的标准 dbo 模式中 我认为它很唐突且有风险 我的第一个想法是将
  • EF Core - 可能会导致循环或多个级联路径

    我已经设置了一个我认为非常简单的数据库 但是我收到以下错误 在表 User 上引入 FOREIGN KEY 约束 FK User Suburb SuburbId 可能会导致循环或多个级联路径 指定 ON DELETE NO ACTION 或
  • 识别关系并插入子实体会导致“无法在表中插入标识列的显式值”

    我正在尝试在实体框架中获取可识别的关系 以便我可以使用 删除 从其集合中删除项目 我创建了一个测试 例如 public class OrderLine Key Column Order 0 public int OrderLineId ge
  • 实体框架 5 - 抽象类型“X”没有映射的后代,因此无法映射

    尝试操作时出现以下错误这个对象 https github com gbirchmeier quickfixn blob master QuickFIXn Message FIX44 TradeCaptureReportRequestAck
  • 如何创建实体集或模型而不在数据库中创建相应的表 - 实体框架

    我的 sqlserver 数据库中有一个存储过程 它返回多个结果集 我正在使用 msdn 中的以下链接从实体框架中的 SP 读取多个结果集 https msdn microsoft com en us library jj691402 v
  • 如何从实体框架中的 .edmx 文件生成数据库?

    我不得不突然转而使用 Code First Entity Framework 4 1 一开始我对这个框架一无所知 但在过去的 8 个小时里 我现在对阅读博客和文章感到更加自在 特别是这个博客 http blogs msdn com b ad
  • 实体框架在多对多更新场景中附加问题

    我有一个场景 我希望更新电影实体及其与流派的多对多关系 导航属性Genres电影中包含存根Genre只包含的对象GenreID因为我想节省查询所有流派的数据库 请参阅下面的代码 其相当不言自明 问题是我需要将 存根 流派附加到上下文 以便
  • Visual Studio 2015 EDMX 模型浏览器和图表丢失

    我最近更新到 Visual Studio 2015 打开我的解决方案并运行 直到我决定将一个实体添加到我的 edmx 中 因此 我双击 edmx 文件来打开图表 或者至少是模型浏览器 但它只打开一个 XML 页面 我检查了安装程序中任何丢失
  • 合并两个 linq 表达式

    我有两个在不同时间构建的表达式 但需要合并才能获得 where 子句的准确 分组 我确实尝试过this https stackoverflow com questions 10390784 how do i combine expressi
  • SQL Server中主键和唯一索引的区别[重复]

    这个问题在这里已经有答案了 我的公司目前正在重写我们最近获得的一个应用程序 我们选择使用 ASP net mvc4 来构建这个系统 并使用实体框架作为我们的 ORM 我们收购的公司的前任所有者非常坚定地要求我们使用他们的旧数据库 并且不对其
  • 如何使用 LINQ 获取唯一 id 列的最大值

    如何使用 LINQ 以最简单的方式编写此代码 SELECT MAX Game id AS MaxValue FROM Dim Game Try context Dim Games Max g gt g Game id

随机推荐

  • 如何向接口添加委托 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 是列部门