Как я могу вернуть анонимный тип из метода? - PullRequest
13 голосов
/ 10 сентября 2008

У меня есть запрос Linq, который я хочу вызвать из нескольких мест:

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

Как я могу создать метод, поместить этот код в него, а затем вызвать его?

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

Ответы [ 4 ]

10 голосов
/ 11 сентября 2008

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
             };
8 голосов
/ 10 сентября 2008

IQueryable

Таким образом, объявление вашего метода будет выглядеть как

public IQueryable GetSomeData()
3 голосов
/ 11 сентября 2008

Общий метод должен дать вам intellisense:

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};
 }
2 голосов
/ 10 сентября 2008

Если вы хотите вернуться, вам нужен тип.

Вместо var объявите, используя IEnumerable<>, и верните эту переменную. Итерация по нему фактически выполняет запрос.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...