[英]Creating a list of objects from LINQ select new
為什么第一個 linq 查詢有效,而第二個無效?
var locations =
from routeLocation in db.Table<RouteLocation>()
join location in db.Table<Location>() on routeLocation.LocationId equals location.Id
where functionalLocation.RouteId == routeId
select new Location() { Id = location.Id, ParentId = location.ParentId,
Name = location.Name
};
var locations =
from routeLocation in db.Table<RouteLocation>()
join location in db.Table<Location>() on routeLocation.LocationId equals location.Id
where functionalLocation.RouteId == routeId
select new { Location = location };
第二個查詢的編譯器錯誤是:
無法將類型 'System.Collections.Generic.List<<anonymous type: Location Location>>' 隱式轉換為 'System.Collections.Generic.List<Location>
我嘗試將 var 聲明為位置列表,但仍然出現相同的錯誤。 我是否可以使用第二個示例中的語法,而不必像第一個示例那樣指定每個屬性?
第二個查詢通過new {...}
創建一個新的匿名類型。 因此, locations
類型是這種匿名類型的IEnumerable
,您re probably trying to cast into a
List`,從而產生顯示的錯誤。
如果你想創建一個新的Location
對象列表,那么你需要在類Location
創建一個復制構造函數(即具有簽名Location(Location location)
的構造函數,它將給定Location
所有字段復制到新的字段中。然后您可以將查詢更改為以下內容:
var locations =
from routeLocation in db.Table<RouteLocation>()
join location in db.Table<Location>() on routeLocation.LocationId equals location.Id
where functionalLocation.RouteId == routeId
select new Location(location);
這會產生一個IEnumerable<Location>
,它可以通過ToList()
方法轉換為List<Location>
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.