2

我有一个作为摘要的类,它将作为 IEnumerable 传递给 MVC 视图。该类看起来像:

public class FixedLineSummary
{
    public long? CustomerId { get; set; }
    public string CustomerName { get; set; }
    public int? NumberOfLines { get; set; }
    public string SiteName { get; set; }
}

从 db 返回的结果包含所有单个条目,因此我使用 linq 来总结这些:

var summary = (from r in result 
              let k = new {r.CustomerId, CustomerName = r.CompanyName, r.SiteName}
              group r by k into t
              select new 
              {
                  t.Key.CustomerId,
                  t.Key.CustomerName,
                  t.Key.SiteName,
                  Lines = t.Sum(r => r.lines)
              });

当我尝试将结果转换为我的对象时,我只是不断收到一个错误:

Instance argument: cannot convert from 'System.Linq.IQueryable<AnonymousType#1>' to 'System.Collections.Generic.IEnumerable<Domain.Entities.FixedLineSummary>'

有没有办法将 linq 查询的结果转换为我的类的枚举?

4

2 回答 2

6

您应该更改投影以创建您的类,而不是匿名类型:

var summary = from r in result 
              let k = new {r.CustomerId, CustomerName = r.CompanyName, r.SiteName}
              group r by k into t
              select new FixedLineSummary
              {
                  CustomerId = t.Key.CustomerId,
                  CustomerName = t.Key.CustomerName,
                  SiteName = t.Key.SiteName,
                  NumberOfLines = t.Sum(r => r.lines)
              };
于 2012-11-16T14:46:22.367 回答
5

您不能将匿名类型转换为,FixedLineSummary因为两者根本不相关(对于编译器)。相反,您需要手动创建类的实例:

IEnumerable<FixedLineSummary> summaries = summary
   .Select(s => new FixedLineSummary
   {
        CustomerId = s.CustomerId,
        CustomerName = s.CustomerName,
        NumberOfLines = s.NumberOfLines,
        SiteName = s.SiteName
   })
   .ToList();
于 2012-11-16T14:47:56.483 回答