如何从方法返回匿名类型?

时间:2020-03-05 18:51:01  来源:igfitidea点击:

我有一个Linq查询,想从多个地方调用:

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

如何创建方法,将代码放入其中,然后调用它?

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

解决方案

回答

IQueryable

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

public IQueryable GetSomeData()

回答

如果要返回,则需要输入类型。

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

回答

IQueryable和IEnumerable都可以工作。但是我们要使用特定于类型的版本,即IQueryable&lt;T>>或者IEnumerable<T>>。

因此,我们需要创建一个类型来保留数据。

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

回答

通用方法应使我们具有智能感知能力:

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