2016-12-30 51 views
3

多列我试图使这项工作的Linq的GroupBy:与潜力空值

var customerSearchResult = customers.GroupBy(        
      x => new { 
       x.CustomerID, 
       x.email, 
       x.CreatedOn, 
       x.FirstName, 
       x.LastName, 
       x.Profile == null ? -1 : x.Profile.Value 
      }) 
      .Select(csr => new CustomerSearchResult 
      { 
       CustomerID = csr.Key.CustomerID, 
       Email = csr.Key.email, 
       CreatedOn = csr.Key.CreatedOn 

      }); 

我正在一个

错误CS0746无效的匿名类型成员声明。匿名类型 成员必须声明为成员分配,简单名称或 成员访问。

由于此行x.Profile == null ? -1 : x.Profile.Value 配置文件可以为空。

任何想法如何做到这一点?

回答

6

Anonymous类中声明名称为这个变量:

var customerSearchResult = customers.GroupBy(        
      x => new { 
       x.CustomerID, 
       x.email, 
       x.CreatedOn, 
       x.FirstName, 
       x.LastName, 
       Profile = x.Profile == null ? -1 : x.Profile.Value 
      }) 
      .Select(csr => new CustomerSearchResult 
      { 
       CustomerID = csr.Key.CustomerID, 
       Email = csr.Key.email, 
       CreatedOn = csr.Key.CreatedOn 
      }); 

正如在评论中提及@ Abion47,可以简化您的assihnment为:

Profile = x.Profile?.Value ?? -1 
+0

谢谢,完美的作品 – Theo

+1

作为替代,如果你使用C#6,我建议使用空条件运算符'?'和空合并运算符'''使代码看起来更清晰。即'Profile = x.Profile?.Value ?? -1;' – Abion47

+0

@Theo比你可以将答案标记为解决方案:) –