Как получить доступ к столбцам из IQueryable при динамическом построении? - PullRequest
2 голосов
/ 29 января 2011

Я использую библиотеку System.Linq.Data, предоставленную здесь - http://weblogs.asp.net/scottgu/archive/2008/01/07/dynamic-linq-part-1-using-the-linq-dynamic-query-library.aspx

У меня есть следующий запрос, который прекрасно работает и возвращает Iqueryable

IQueryable customer =
                ctx.Customers.Where(cust => true).Select("new("Name,Address")");

Однако как мне получить доступ к этим возвращенным столбцам? Я не могу получить к ним доступ с помощью лямбда-выражения следующим образом:

var test = customer.Where (cust => cust.Name == "Mike"). First ();

"cust.Name" в вышеуказанном случае не может быть разрешено. Его нет в списке методов / свойств для "cust".

Я предполагаю, что здесь что-то не так. Я понимаю, что я работаю с анонимным типом. Нужно ли создавать DTO в этом случае?

Ответы [ 2 ]

0 голосов
/ 16 марта 2017

Попробуйте цикл foreach:

var a = _context.SENDERS.Select(x=>new { Address=x.ADDRESS, Company=x.COMPANY });
foreach(var obj in a)
{
    Console.WriteLine(obj.Address);
    Console.WriteLine(obj.Company);
}
0 голосов
/ 26 января 2013

Для любого IQueryable у вас есть свойство с именем ElementType. Вы можете использовать его для получения свойств, как описано ниже

IQueryable query = from t in db.Cities
               selec new 
               {
                  Id = t.Id,
                  CityName = t.Name
               };

if(query!=null)
{
    Type elementType = query.ElementType;
    foreach(PropertyInfo pi in elementType.GetProperties())
    {

    }
}
...