2012-04-21 100 views
1

我有一個函數返回一個類型列表:List < Id:Name,Name:string> 你怎麼在C#中指定返回這個List Type ?返回一個List <Id:int,Name:string>

下面是代碼:

public ?????? GetDepartements(int idRegion) 
    { 
     var a = (from o in _meilleurPrestaEntities.Departements 
       where o.de_id_region == idRegion 
       select new {Id = o.id_departement, Name = o.nom}).ToList(); 

     return a; 
    } 

返回用作JSON結果。

感謝

回答

2

你不能。你有一個匿名類型的列表,你不能指定匿名類型作爲方法返回類型的一部分(或者其他任何地方,除非你可以使用var)。

爲了解決這個問題,你有幾種選擇:

  • 創建正常類來表示返回類型和使用,在您的返回類型。
  • 使用類似List<Tuple<int, string>>的東西。
  • 退貨List<dynamic>。這樣,您將可以像往常一樣處理返回的值,但不會得到編譯時檢查或IntelliSense。
  • 返回List<object>。如果你不需要以通常的方式訪問屬性,這會很有用,但是你只會將結果傳遞給使用反射的東西。
+0

嗨試過把公共元組 GetDepartements(int idRegion),同樣的錯誤,不能轉換類型List 到元組:( – dtjmsy 2012-04-21 22:54:28

+0

@dtjmsy,所以使它成爲一個元組。 o.id_departement,o.nom))。ToList()' – 2012-04-21 23:02:08

+0

@jb。或更好:'Tuple.Create(o.id_departement,o.nom)'。 – svick 2012-04-21 23:05:35

4

我建議使用一個鍵值對

return List<KeyValuePair<int,string>>() 

[編輯]你需要稍微修改您的代碼 - 它應該是這個樣子:

var a = (from o in _meilleurPrestaEntities.Departements 
       where o.de_id_region == idRegion 
       select new KeyValuePair<int,string>(o.id_departement,o.nom}).ToList(); 
+0

+1,如果可用的話,他們也可以使用可能更好的名稱爲「Tuple」。但它絕對沒有區別。 – Jon 2012-04-21 22:42:41

+1

@Jon,確實沒有關鍵或價值,所以方法簽名中的隱含文檔是錯誤的。 「Tuple」在這裏會好很多。 – svick 2012-04-21 22:45:54

+0

我試過列表>,沒有成功,返回a,紅色捲曲錯誤消息=無法將表達式類型'System.collection.generic.List {Id:int,Name:string}'轉換爲返回類型'System.collection.generic.List > – dtjmsy 2012-04-21 22:50:53

0

我認爲你必須指定一個類型,然後在返回值和你的select語句中使用該類型。

0

我沒有VisualStudio打開試試它,但我認爲你實際上可以在這種情況下返回dynamic。或者你可以使用ExpandoObject

然而,正如其他人所提到的,「更好」的方法是使用類似TupleKeyValuePair,還是不要偷懶,只是讓你將返回到視圖什麼實際的模型(換句話說,一個「視圖模型」)。

相關問題