2008-09-10 84 views
12

我有我想从多个地方调用LINQ查询:如何从方法返回匿名类型?

var myData = from a in db.MyTable 
      where a.MyValue == "A" 
      select new { 
          a.Key, 
          a.MyValue 
          }; 

如何创建一个方法,把这个代码,然后打电话吗?

public ??? GetSomeData() 
{ 
    // my Linq query 
} 
+0

你为什么不回遣词? – 2008-09-10 20:09:29

+1

这只是一个简单的例子。我有更多的价值,我实际选择,不适合字典 – ScottG 2008-09-10 20:28:37

+0

可能重复的[返回匿名类型?](http://stackoverflow.com/questions/534690/return-anonymous-type) – nawfal 2014-06-28 08:18:13

回答

9

IQueryable和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 
      }; 
7

IQueryable

所以,你的方法声明看起来像

public IQueryable GetSomeData() 
2

如果你想返回,你需要一个类型。

而不是var,声明使用IEnumerable<>并返回该变量。遍历它实际上执行查询。

3

泛型方法应该给你的智能感知:

public class MyType {Key{get;set;} Value{get;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}; 
}