2009-11-07 73 views
0

如何我在LINQ satament选择列别名代码的选择条款,所以我可以对他们进行排序基本上我要完成在LINQ这个SQL语句:LINQ到SQL动态排序问题

select 
    type_id as id, 
    type_desc as description 
from 
    dbo.equip_type_avt 
order by 
    description 

怎么办我更换了?????我的LINQ语句中的.Select子句中的

public IQueryable<equip_type_avt> GetGridEquipmentTypes(string sidx, string sord) 
    { 

     try 
     { 
      return 
       ulsDB.equip_type_avts 
        .Select(?????) 
        .OrderBy(sidx + " " + sord); 


     } 
     catch (Exception ex) 
     { 
      string strErr = ex.Message; 
      return null; 
     } 

    } 

回答

3

您可以使用匿名类型:

table.Select(x => new 
      { 
       ID = x.type_id, 
       Description = x.type_desc 
      }); 

但是,你不能访问的属性匿名类型在声明范围之外(无论反射或其他肮脏的hackery,无论如何),所以如果你想使用该函数以外的结果,你只需创建一个类,并在查询中使用类型初始化程序创建一个实例:

public class Foobar 
{ 
    public int ID { get; set; } 
    public string Description { get; set; } 
} 

... 

table.Select(x => new Foobar() // Note the difference here 
      { 
       ID = x.type_id, 
       Description = x.type_desc 
      }); 

问题虽然:如果您想以不同的方式命名列,为什么不在声明列属性映射的地方更改它?在LINQ-to-SQL中,您可以根据需要命名数据库列,但为该属性指定名称“ID”或“Description”。

+0

谢谢。其实我想用我的功能作为一个 – MikeD 2009-11-08 23:33:22

1

我不知道我理解你的问题,sidx和sord与你的查询有什么关系?

不是你的问题,而是你必须用OrderBy(...)。ThenBy(...)来结束你的查询,而不是联合的OrderBy?

+0

请参阅JulianR的评论。 – MikeD 2009-11-08 20:21:51

0

如果您想以简单的方式按字符串排序,请下载Dynamic LINQ库。

但是,这是2000行代码,其中大部分代码完全是为了排序目的而多余的。

自己动手也不应该很难,但需要对表达树有一定的了解。尽管如此,我还是无法帮助你。

编辑:我添加了另一个答案,即希望能回答你的问题的实际:)

+0

我应该更清楚地重新问我的问题。我已经有分拣工作。我想返回结果作为'ID'和'Description'的列名,而不是'type_id'和'type_desc',它们是实际的列名。它在使用as子句的SQL语句中很容易。我如何使用Select运算符来完成同样的事情。 – MikeD 2009-11-08 20:19:54