2012-04-21 56 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,还是不要偷懒,只是让你将返回到视图什么实际的模型(换句话说,一个“视图模型”)。

相关问题