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

Dynamic 动态构造时如何从IQueryable访问列?,dynamic,linq-to-entities,iqueryable,Dynamic,Linq To Entities,Iqueryable,我正在使用此处提供的System.Linq.Data库- 我有下面的查询,它工作得很好,并返回一个Iqueryable IQueryable customer = ctx.Customers.Where(cust => true).Select("new("Name,Address")"); 但是,如何访问这些返回的列?我无法使用lambda表达式访问它们,如下所示: var test=customer.Wherecust=>cust.Name==Mike

我正在使用此处提供的System.Linq.Data库-

我有下面的查询,它工作得很好,并返回一个Iqueryable

IQueryable customer =
                ctx.Customers.Where(cust => true).Select("new("Name,Address")");
但是,如何访问这些返回的列?我无法使用lambda表达式访问它们,如下所示:

var test=customer.Wherecust=>cust.Name==Mike.First

无法解析上述情况下的客户名称。它不存在于cust的方法/属性列表中


我是不是在想错什么了。我知道我使用的是匿名类型。在这种情况下,我必须创建DTO吗?

对于任何名为ElementType的IQueryable属性。 您可以使用它来获取属性,如下所述

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())
    {

    }
}

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

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

请参阅。那里的示例适用于显式转换。但是在我的例子中,我不能显式地将cust强制转换为DynamicClass,因为lambda表达式不支持这一点。所以我无法从您给我的链接中执行类似的操作:var test=customer.WhereDynamicClasscust=>cust.Name==Mike.First;另外,我不能使用使用的第一个解决方案是dynamic关键字,因为我使用的是.NET3.5。好吧,一旦使用动态查询进行投影,就不能再使用lambdas了。你必须坚持使用动态表达式。var test=customer.WhereName=\Mike\.First;然后,当您获得测试对象时,您可以应用另一个问题中的步骤。请参阅。那里的示例适用于显式转换。但是在我的例子中,我不能显式地将cust强制转换为DynamicClass,因为lambda表达式不支持这一点。所以我无法从您给我的链接中执行类似的操作:var test=customer.WhereDynamicClasscust=>cust.Name==Mike.First;另外,我不能使用使用的第一个解决方案是dynamic关键字,因为我使用的是.NET3.5。好吧,一旦使用动态查询进行投影,就不能再使用lambdas了。你必须坚持使用动态表达式。var test=customer.WhereName=\Mike\.First;然后,当您获得测试对象时,您可以应用另一个问题中的步骤。