2015-10-12 129 views
-4

我有一個將linq結果轉換爲對象的問題。LINQ結果到對象初始化器

我有一個名爲Plant的類和一個包含其相關信息(例如名稱,拉丁名稱,棲息地等)的數據庫。 我想從執行的查詢中創建一個新對象,並將它發送給應用程序的另一部分。所以我搞這個代碼:

using (DataClassesDataContext dc = new DataClassesDataContext()) 
{ 

    var sPlant = (from p in dc.Plants where p.Name == plantName select new Plant 
    { 
     Name = p.Name, 
     LatinName = p.LatinName, 
     Habitat = p.Habitat, 
     LeafHarvesting = p.LeafHarvesting, 
     FlowerHarvesting = p.FlowerHarvesting, 
     FruitHarvesting = p.FruitHarvesting, 
     RootHarvesting = p.RootHarvesting, 
     Morphology = p.Morphology, 
     Pharmacology = p.Pharmacology, 
     Img = p.Img, 
     GPSCoordinates = p.GPSCoordinates 
    } 
); 

但它不會將結果轉換爲新的Plant對象。

+1

這是什麼情況?你有錯誤信息嗎?什麼是輸出? – TomDoesCode

+5

這是一個'select',所以我想這會創建一個'IEnumerable '或什麼的。添加一個「First()」。 –

+0

無法從'System.Linq.IQueryable '轉換爲'Zielnik.Plant' – vortex

回答

1

因爲看起來Plant不是數據存儲的一部分,所以你需要返回一個Linq到SQL可以處理的對象,然後在本地創建你的Plant實例。

首先查詢包含您需要的屬性的匿名對象列表,然後只創建您的Plant。在最後添加First()FirstOrDefault()只能檢索到一個Plant

using (DataClassesDataContext dc = new DataClassesDataContext()) 
{ 
    var sPlant = (from p in dc.Plants where p.Name == plantName 
     select new { 
      Name = p.Name, 
      LatinName = p.LatinName, 
      Habitat = p.Habitat, 
      LeafHarvesting = p.LeafHarvesting, 
      FlowerHarvesting = p.FlowerHarvesting, 
      FruitHarvesting = p.FruitHarvesting, 
      RootHarvesting = p.RootHarvesting, 
      Morphology = p.Morphology, 
      Pharmacology = p.Pharmacology, 
      Img = p.Img, 
      GPSCoordinates = p.GPSCoordinates 
     }).AsEnumerable().Select(p => new Plant 
     { 
      Name = p.Name, 
      LatinName = p.LatinName, 
      Habitat = p.Habitat, 
      LeafHarvesting = p.LeafHarvesting, 
      FlowerHarvesting = p.FlowerHarvesting, 
      FruitHarvesting = p.FruitHarvesting, 
      RootHarvesting = p.RootHarvesting, 
      Morphology = p.Morphology, 
      Pharmacology = p.Pharmacology, 
      Img = p.Img, 
      GPSCoordinates = p.GPSCoordinates 
     }).First(); 
} 
+0

在System.Data.Linq.dll – vortex

+0

顯式構造單元類型「Zielnik」中發生未處理的「System.NotSupportedException」類型異常。工廠「在查詢中是不允許的。 – vortex

+0

它導致同樣的異常 – vortex

1

使用First或FirstOrDefault函數來獲取對象。請參閱here以獲得差異。

0

如果您的查詢設想返回多個結果,請使用.TOList()。如果你想只取第一行,使用FirstOrDefault()