如何从方法返回匿名类型?
Posted
技术标签:
【中文标题】如何从方法返回匿名类型?【英文标题】:How can I return an anonymous type from a method? 【发布时间】:2010-09-08 11:30:23 【问题描述】:我有一个想要从多个地方调用的 Linq 查询:
var myData = from a in db.MyTable
where a.MyValue == "A"
select new
a.Key,
a.MyValue
;
如何创建一个方法,将这段代码放入其中,然后调用它?
public ??? GetSomeData()
// my Linq query
【问题讨论】:
你为什么不返回DictionIQueryable 和 IEnumerable 都可以工作。但是您想使用特定类型的版本,IQueryable<
T>
或 IEnumerable <
T>
。
所以你需要创建一个类型来保存数据。
var myData = from a in db.MyTable
where a.MyValue == "A"
select new MyType
Key = a.Key,
Value = a.MyValue
;
【讨论】:
非常感谢您扩展此解决方案。关键是使用特定类型。这很好用 嘿,我在 Darren 之前 1 小时给出了这个答案。为我提供不提供样品的权利:) 要清楚,发生的事情是 select new ... 创建了一个匿名类型(需要使用 var 关键字)。此类型没有名称,只能在创建它的方法中本地使用(除非您使用反射)。要在外部使用它,您需要创建一个命名类型。【参考方案2】:IQueryable
所以你的方法声明看起来像
public IQueryable GetSomeData()
【讨论】:
这样做你不会有智能感知,只能通过反射访问项目的属性。 请注意查询尚未运行。 是的,我刚刚注意到这一点..我没有智能感知。一定有更好的办法。 这取决于你对更好方式的定义。延迟加载在许多情况下都很好。【参考方案3】:一个通用的方法应该给你智能感知:
public class MyType Keyget;set; Valueget;set
public IQueryable<T> GetSomeData<T>() where T : MyType, new()
return from a in db.MyTable
where a.MyValue == "A"
select new T Key=a.Key,Value=a.MyValue;
【讨论】:
【参考方案4】:如果你想返回,你需要一个类型。
使用IEnumerable<>
声明并返回该变量,而不是var
。遍历它实际上会执行查询。
【讨论】:
以上是关于如何从方法返回匿名类型?的主要内容,如果未能解决你的问题,请参考以下文章
从 MVC 4 Web Api 返回匿名类型失败并出现序列化错误
Entity Framework 6 Recipes 2nd Edition(11-5)译 -> 从”模型定义”函数返回一个匿名类型