【问题标题】:Object format and return empty string in LINQ query对象格式并在 LINQ 查询中返回空字符串
【发布时间】:2015-03-23 15:06:00
【问题描述】:

我正在使用 MVC 4 和实体框架,我正在从服务器检索电子邮件:

var data = db.Candidates.Where(c => ids.Contains(c.ID) && c.Email1 != null).Select(c => new { c.Email1, c.ID }).ToList();

我的第一个问题:LINQ 是否允许我从 Email1 字段返回一个空字符串,如果它为空,类似于 SQL 合并? (我会从 where 子句中删除 null 测试)。

第二个问题:什么是最容易使用的对象(如果我想将 c.Name 与 Email1 一起替换,则替换“var data =”,然后在循环中使用两者?我是否应该创建一个模型2 个字段?

非常感谢您提供任何见解。

【问题讨论】:

    标签: c# linq entity-framework asp.net-mvc-4


    【解决方案1】:

    我的第一个问题:LINQ 是否允许我从 Email1 字段返回一个空字符串,如果它为空,类似于 SQL 合并? (我会从 where 子句中删除空测试)。

    是的,?? 运算符的工作方式类似于 coalesce。:

    new { Email1 = c.Email1 ?? "", c.ID } //String.Empty would be nicer, but i think it depends on EF version if you are allowed to use it.
    

    对于您的第二个问题,如果这是您要使用它们的唯一地方,那么匿名就很好。 如果你想在其他地方使用它,是的,创建一个只有两个属性的对象......毕竟这就是对象的目的。 (或者可能是一个结构?)

    【讨论】:

      【解决方案2】:
      1. 一次只问一个问题。

      2a。 C# 中的 Null Coalescence 运算符是 ??

      2b。这可能会或可能不会被您的 Linq 提供程序转换为数据库查询。

      1. 这样做,

        var data = db.Candidates
            .Where(c => ids.Contains(c.ID))
            .Select(c => new
                {
                    Id = c.Id,
                    Email1 = c.Email1 ?? string.Empty,
                    Name = c.Name 
                });
        
        foreach(var row in data)
        {
            var name = row.Name // etc...
        }
        

      如果您的 Linq 提供程序不支持 ?? 运算符,请放入 .ToList() 并使用 linq-to-objects 执行这样的转换,

      var data = db.Candidates
          .Where(c => ids.Contains(c.ID))
          .ToList() // <-- from here is Linq-To-Objects
          .Select(c => new
              {
                  Id = c.Id,
                  Email1 = c.Email1 ?? string.Empty,
                  Name = c.Name 
              });
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-09-14
        • 2016-07-21
        • 2011-08-12
        • 1970-01-01
        • 1970-01-01
        • 2023-02-23
        相关资源
        最近更新 更多