2014-10-10 71 views
0

我的select語句不返回整個Customer對象,只有utrustningNr開始。我如何返回它以正確的方式沒有得到這個錯誤:如何返回不完整的對象?

Cannot implicitly convert type 'System.Collections.Generic.List<AnonymousType#1>' to 'System.Collections.Generic.List<fjallvick.utrustning>

public List<utrustning> searchEquipment(string equipmentNr) 
{ 
    var queryEquipment = from utrustning in globalDBConnString.context.utrustnings 
         where utrustning.utrustningNr == equipmentNr 
         select (new { utrustning.utrustningNr, utrustning.beskrivning }); 

    return queryEquipment.ToList(); 
} 
+3

更換新的'{...}'用'新utrustning {...}'。 – 2014-10-10 20:09:46

回答

1
List<utrustning> queryEquipment = from Utrustning in globalDBConnString.context.utrustnings 
           where Utrustning.utrustningNr == equipmentNr 
           select new utrustning { Utrustning.utrustningNr, Utrustning.beskrivning }; 

      return queryEquipment.ToList(); 
2

的問題是,你的select子句創建一個新的匿名類型的每個項目,而不是一個新utrustning 。你可能想是這樣的:

var queryEquipment = from utrustning in globalDBConnString.context.utrustnings 
        where utrustning.utrustningNr == equipmentNr 
        select new utrustning { 
         utrustningNr = utrustning.utrustningNr, 
         beskrivning = utrustning.beskrivning 
        }; 

另外,如果globalDBConnString.context.utrustnings實際上返回ustrustning值的序列已經,你可以只使用:

return globalDBConnString.context.utrustnings 
         .Where(u => u.utrustningNr == equipmentNr) 
         .ToList(); 

如果只返回兩個屬性,您最好創建一個只有具有這兩個屬性的新類型 - 然後更改該方法的返回類型,並更改select子句以使用該類型。

注意事項:如果遵循正常的.NET命名約定,則代碼將更易於理解。

+0

很榮幸得到你的評論Jon Skeet,WOW,感覺我現在可以死了! :O 我該怎麼改變方法的返回類型? 現在我得到錯誤'System.NotSupportedException',並且不允許在查詢中顯式構造實體類型'fjallvick.utrustning'。 – 2014-10-10 20:48:34

+0

@SadjadJohansson:根據你想要達到的目標,我給了你各種不同的選擇 - 我們還沒有真正知道這一點。如果您發現LINQ提供程序不支持某些東西,則可能需要投影爲匿名類型,然後使用'AsEnumerable()'在本地執行其餘的操作,然後將匿名類型投影到另一個指定類型中。在SO上搜索'AsEnumerable' - 有很多使用該技術的答案。(我很快登上飛機,所以在這個問題上可能無法再提供幫助。) – 2014-10-10 20:52:11

0

您將無法使用您在那裏編寫的查詢來做到這一點......您正在返回一個匿名對象,您無法在代碼中給出名稱。

假設utrustningNr和'簡單描述」都是字符串:

變化

select new { utrustning.utrustningNr, utrustning.beskrivning } 

到:

select new Tuple<string, string>(utrustning.utrustningNr, utrustning.beskrivning); 

那麼你的返回類型爲

List<Tuple<string, string>> 
2

你是選擇一個新的匿名類型時,你這樣做:select (new { utrustning.utrustningNr, utrustning.beskrivning })

你可以做這樣的事情選擇特定類型:

public List<utrustning> searchEquipment(string equipmentNr) 
{ 
    var queryEquipment = from utrustning in globalDBConnString.context.utrustnings 
         where utrustning.utrustningNr == equipmentNr 
         select new utrustning 
          { 
           utrustningNr = utrustning.utrustningNr, 
           utrustning.beskrivning); 
          }; 

    return queryEquipment.ToList(); 
} 
相關問題