如何在动态构造时从IQueryable访问列?

时间:2011-01-28 21:15:57

标签: dynamic linq-to-entities iqueryable

我正在使用此处提供的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")");

但是,如何访问这些返回的列?我无法使用lambda表达式访问它们,如下所示:

var test = customer.Where(cust => cust.Name ==“Mike”)。First();

“cust.Name”在上述情况下无法解决。它不存在于“cust”的方法/属性列表中。

我在这里假设有问题。我知道我正在使用匿名类型。在这种情况下我是否必须创建DTO?

2 个答案:

答案 0 :(得分:0)

对于任何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())
    {

    }
}

答案 1 :(得分:0)

尝试使用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);
}