Ich habe eine Klasse, die als Zusammenfassung fungiert und als IEnumerable an eine MVC-Ansicht übergeben wird. Die Klasse sieht so aus:
public class FixedLineSummary
{
public long? CustomerId { get; set; }
public string CustomerName { get; set; }
public int? NumberOfLines { get; set; }
public string SiteName { get; set; }
}
Die Ergebnisse, die von der Datenbankbibliothek zurückgegeben werden, enthalten alle Einzeleinträge. Daher fasse ich diese mit linq zusammen:
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)
});
Wenn ich versuche, die Ergebnisse in mein Objekt umzuwandeln, bekomme ich einfach einen Fehler, der
Instance argument: cannot convert from "System.Linq.IQueryable<AnonymousType#1>" to "System.Collections.Generic.IEnumerable<Domain.Entities.FixedLineSummary>"
Gibt es eine Möglichkeit, die Ergebnisse der linq-Abfrage in eine Auflistung meiner Klasse umzuwandeln?
Antworten:
5 für die Antwort № 1Sie können den anonymen Typ nicht in umwandeln FixedLineSummary
da beide nicht miteinander verwandt sind (für den Compiler). Stattdessen müssen Sie Instanzen Ihrer Klasse manuell erstellen:
IEnumerable<FixedLineSummary> summaries = summary
.Select(s => new FixedLineSummary
{
CustomerId = s.CustomerId,
CustomerName = s.CustomerName,
NumberOfLines = s.NumberOfLines,
SiteName = s.SiteName
})
.ToList();
6 für die Antwort № 2
Sie sollten die Projektion ändern, um Ihre Klasse zu erstellen, und nicht einen anonymen Typ:
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)
};