Как я могу вернуть анонимный тип из метода?
-
09-06-2019 - |
Вопрос
У меня есть запрос Linq, который я хочу вызвать из нескольких мест:
var myData = from a in db.MyTable
where a.MyValue == "A"
select new {
a.Key,
a.MyValue
};
Как я могу создать метод, поместить в него этот код, а затем вызвать его?
public ??? GetSomeData()
{
// my Linq query
}
Решение
IQueryable и IEnumerable работают.Но вы хотите использовать версию конкретного типа, IQueryable<
Т>
или IEnumerable <
Т>
.
Итак, вам нужно создать тип для хранения данных.
var myData = from a in db.MyTable
where a.MyValue == "A"
select new MyType
{
Key = a.Key,
Value = a.MyValue
};
Другие советы
Таким образом, ваше объявление метода будет выглядеть так
public IQueryable GetSomeData()
Общий метод должен дать вам 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};
}
Если вы хотите вернуться, вам нужен тип.
Вместо var
, объявите, используя IEnumerable<>
и верните эту переменную.Итерация по нему фактически выполняет запрос.
Не связан с StackOverflow