序列不包含匹配元素

2024-01-01

我有一个 ASP.NET 应用程序,其中使用 linq 进行数据操作。运行时,我收到异常“序列不包含匹配元素”。

if (_lstAcl.Documents.Count > 0)
{
    for (i = 0; i <= _lstAcl.Documents.Count - 1; i++)
    {
        string id = _lstAcl.Documents[i].ID.ToString();                           
        var documentRow = _dsACL.Documents.First(o => o.ID == id);
        if (documentRow !=null)
        {

            _lstAcl.Documents[i].Read = documentRow.Read;
            _lstAcl.Documents[i].ReadRule = documentRow.ReadRule;

            _lstAcl.Documents[i].Create= documentRow.Create;
            _lstAcl.Documents[i].CreateRule = documentRow.CreateRule;

            _lstAcl.Documents[i].Update = documentRow.Update;
            _lstAcl.Documents[i].UpdateRule = documentRow.UpdateRule;

            _lstAcl.Documents[i].Delete = documentRow.Delete;
            _lstAcl.Documents[i].DeleteRule = documentRow.DeleteRule;
        }
    }
}

好吧,我希望是这一行抛出异常:

var documentRow = _dsACL.Documents.First(o => o.ID == id)

First() http://msdn.microsoft.com/en-us/library/system.linq.enumerable.first.aspx如果找不到任何匹配的元素,则会抛出异常。鉴于您之后立即测试 null,听起来您想要FirstOrDefault() http://msdn.microsoft.com/en-us/library/bb340482.aspx,如果未找到匹配项,则返回元素类型的默认值(对于引用类型为 null):

var documentRow = _dsACL.Documents.FirstOrDefault(o => o.ID == id)

在某些情况下需要考虑的其他选项是Single() http://msdn.microsoft.com/en-us/library/system.linq.enumerable.single.aspx(当你相信只有一个匹配元素时)并且SingleOrDefault() http://msdn.microsoft.com/en-us/library/system.linq.enumerable.singleordefault.aspx(当您相信只有一个或零个匹配元素时)。我怀疑FirstOrDefault在这种特殊情况下是最好的选择,但无论如何还是值得了解其他选择。

另一方面,看起来您首先在此处加入实际上可能会更好。如果你不关心它会做all您可以使用的匹配项(而不仅仅是第一个):

var query = from target in _lstAcl.Documents
            join source in _dsAcl.Document
            where source.ID.ToString() equals target.ID
            select new { source, target };
foreach (var pair in query)
{
    target.Read = source.Read;
    target.ReadRule = source.ReadRule;
    // etc
}

这样更简单and海事组织更高效。

即使你do决定保留循环,我有几个建议:

  • 摆脱外在的束缚if。你不需要它,就好像 Count 为零一样 for 循环体永远不会执行
  • 在 for 循环中使用独占上限 - 它们在 C# 中更为惯用:

    for (i = 0; i < _lstAcl.Documents.Count; i++)
    
  • 消除公共子表达式:

    var target = _lstAcl.Documents[i];
    // Now use target for the rest of the loop body
    
  • 尽可能使用foreach代替for首先:

    foreach (var target in _lstAcl.Documents)
    
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

序列不包含匹配元素 的相关文章

随机推荐

  • 有关使用重写的 AuthorizeAttribute、线程安全、ChildActions 和缓存的 MVC3 自定义安全设置的问题

    因此 在为我的 MVC3 应用程序寻找强大的安全解决方案后 我遇到了这篇博文 http blogs msdn com b rickandy archive 2011 05 02 securing your asp net mvc 3 app
  • 在结构体移动后,我对结构体成员的引用如何仍然有效?

    我正在使用函数 名为get 然后我使用另一个函数 名为pr 然后我取消引用先前创建的指针 我在这里是否错了 又名意外工作 或者我的参考根据某些规则仍然有效 struct MyStruct inner i32 fn get a MyStruc
  • 关于 C 和 C++ 中 offsetof 的用法?

    在C中 我看到一些offsetof的用法来计算结构中成员到其开头的偏移量 还建议在C 中使用吗 如果没有这个宏 还有其他方法可以做到这一点吗 C 有指向成员的指针 它们与偏移量类似 但 1 类型安全且 2 更通用 它们也适用于方法 基类等
  • 绑定日期格式 (ASP.NET MVC)

    在我的 ASP net MVC 应用程序中 我有一个如下所示的视图
  • 在r中按组绘制散点图

    r 中是否有任何函数允许绘制这种按组分隔点的散点图 这是我到目前为止所做的 hours c 0 00 1 78 0 50 2 00 2 80 2 00 0 16 0 34 1 00 1 00 2 00 1 34 1 00 1 10 0 43
  • 是否应该将 .gradle 文件夹添加到版本控制中?

    Gradle 创建一个名为的文件夹 gradle 我应该使用版本控制 即 git 跟踪它吗 更重要的是 为什么 为什么不 我应该跟踪 gradle 目录吗 不 可以放心地忽略它 我为什么要忽略它 它纯粹是为了缓存信息 您不希望它出现在您的存
  • Julia - 将行/列添加到稀疏矩阵

    有没有快速的方法将列 行添加到稀疏矩阵 a sparse 1 2 1 2 1 1 2x2 sparse matrix with 2 Int64 entries 1 1 1 2 2 1 我怎样才能添加 f x a 3 3 1 无需取出所有值并
  • ARM UART0 输入输出。 LPC2138 我做错了什么。 [复制]

    这个问题在这里已经有答案了 read character LDR r0 0xE000C014 LDRB r1 r0 BIC r1 r1 0xFFFFFFF0 CMP r1 0 BEQ read character LDR r6 r1 LDR
  • Maven 测试期间未找到 persistence.xml

    我正在尝试在 Maven 构建期间将测试数据加载到测试数据库中以进行集成测试 persistence xml 正在被复制到target test classes META INF 正确 但在运行测试时出现此异常 javax persiste
  • Jquery变量变量

    存在一些像变量变量这样的概念来打印变量名称或动态调用函数 http php net manual en language variables variable php http php net manual en language vari
  • 检测php编码

    我有以下字符串 如何将此字符串编码为 int UTF 8 文件 PHP 我花了一整天的时间来了解如何做到这一点 我认为这就是您正在寻找的 http www php net manual en function mb detect encod
  • 3D 数组 -> 应用 -> 3D 数组

    它似乎apply仅在一个边距上操作时不会重新组装 3D 阵列 考虑 arr lt array runif 2 4 3 dim c 2 4 3 dimnames list a paste0 a 1 2 b paste0 b 1 4 c pas
  • DTSTART 的 PHP 日期转 iCal 日期格式

    有没有一种简单的方法可以使用 php 日期获取 iCal DTSTART 的正确格式 如果我没有时间 我需要的格式如下 20111008T110000 或 20111008 这个很简单 PHP 日期是否有一种快速的方法来做到这一点 特别是在
  • 错误:捕获异常 [错误:不支持的命令 [addSelection |]

    我正在使用带有 C 的 selenium Web 驱动程序 并在尝试选择可用列表上的项目时收到错误如下 错误 捕获异常 错误 不支持的命令 addSelection 有人可以帮我弄这个吗 有什么解决办法吗 我正在尝试从左侧的列表中选择一个项
  • 将 SQL 查询转换为 django 查询

    我正在尝试将 sql 查询转换为 django 查询 但未能做到这一点 任何人都可以帮助我 select id name round value numeric 2 as value st transform geometry 3857 a
  • 被逐出的对象仍然会向 Hibernate 中的数据库发出更新

    我有一个问题 我驱逐一个实体 但对其进行的更改仍然会更改数据库 这是我的 DAO 中方法的一部分 Entity public class Profile Id GeneratedValue private Long id OneToMany
  • C++ getter 中的 const [重复]

    这个问题在这里已经有答案了 我仍在学习 C 并且我正在阅读所有我必须使用的内容const尽我所能 我认为是出于速度原因 我通常这样写 getter 方法 const bool isReady return ready 但我看到一些IDEA以
  • Linux C 原始套接字 TCP 握手

    我正在尝试使用 C 中的原始套接字 在 Debian 系统上 创建 TCP 连接 但我很难让它工作 它会发送一个数据包 但我没有从服务器得到任何响应 我已经测试并比较了该数据包与从 nmap 发送的数据包 我看不到任何重大差异 这是服务器端
  • jquery ui datepicker 在 beforeShowDay 出现错误

    我正在尝试使用 jquery ui 的日期选择器来实现事件日历 我已经成功安装了日期选择器并且它显示并工作 当我尝试注册时出现问题beforeShowDay处理程序 像这样 datePicker datepicker beforeShowD
  • 序列不包含匹配元素

    我有一个 ASP NET 应用程序 其中使用 linq 进行数据操作 运行时 我收到异常 序列不包含匹配元素 if lstAcl Documents Count gt 0 for i 0 i lt lstAcl Documents Coun