【问题标题】:Which is better checking of null types or using Any() in LINQ?哪个更好地检查空类型或在 LINQ 中使用 Any()?
【发布时间】:2016-04-19 06:12:25
【问题描述】:

我有这两个代码,我必须知道哪个更好用。 我想这是一样的。 如果我没记错的话,第一个只有一次调用数据库,但是, 我不知道检查 repo != null 是否正确。

(1)

var repo = Repository
  .Query()
  .Where(ur => ur.CustomerId == customerId)
  .SingleOrDefault();

if (repo != null)
{
    // Update repo
    repo.Name = "name here";
}
else
{
    // code
}

(2)

var repo = Repository
  .Query()
  .Any(ur => ur.CustomerId == customerId);

if (repo)
{
    var result = Repository
      .Query()
      .Where(ur => ur.CustomerId == customerId)
      .Single();

    result.Name = "name here";
}
else
{
    // code
}

【问题讨论】:

    标签: c# entity-framework linq linq-to-sql linq-to-entities


    【解决方案1】:

    第二个选项找到一个元素两次。这里

    Repository
      .Query()
      .Any(ur => ur.CustomerId == customerId)
    

    这里

    Repository
      .Query()
      .Where(ur => ur.CustomerId == customerId)
      .Single()
    

    第一个选项只找到一次。这是选择第一个选项的原因。 而且,你可以让这段代码变得更好:

    var repo = Repository
      .Query()
      .Where(ur => ur.CustomerId == customerId)
      .SingleOrDefault();
    

    随便写

    var repo = Repository
      .Query()
      .SingleOrDefault(ur => ur.CustomerId == customerId);
    

    以及对未来的建议:当您想要检查 事实 您在查询中有任何元素,但您不需要此元素时,请使用 Any()

    【讨论】:

      【解决方案2】:

      在第二种方法中,您首先通过 Any 项目浏览项目以查找匹配项,然后再次获取匹配项。 SingleOrDefault 将在 1 步中完成任务并检查一个项目(以阻止它是否为空)比导航所有项目要便宜得多。
      所以我认为第一种方法更快更好。

      【讨论】:

        猜你喜欢
        • 2010-10-12
        • 1970-01-01
        • 2023-04-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-12-10
        • 2013-07-07
        相关资源
        最近更新 更多