对象格式并在LINQ查询中返回空字符串

时间:2015-03-23 15:06:00

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

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

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

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

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

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

2 个答案:

答案 0 :(得分:3)

  

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

是的,有??运算符与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.

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

答案 1 :(得分:0)

  1. 一次提出一个问题。
  2. 2a上。 C#中的Null Coalescence运算符是??

    2B。这可能会或可能不会由您的Linq Provider转换为数据库查询。

    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...
      }
      
    2. 如果您的Linq Provider不支持??运算符,请输入.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 
              });