簡體   English   中英

從 LINQ 創建對象列表 select new

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM