LINQ to SQL动态排序问题

时间:2009-11-07 21:24:55

标签: linq-to-sql dynamic sorting

如何编写LINQ satament中的Select子句以选择列别名,以便我可以对它们进行排序基本上我想在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 个答案:

答案 0 :(得分: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”或“描述”。

答案 1 :(得分:1)

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

不是你的问题,而是你必须用OrderBy(...)结束你的查询。然后是(...)而不是组合的OrderBy?

答案 2 :(得分:0)

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

然而,这是2000行代码,其中大部分代码完全是冗余的,仅用于排序。

自己动手不应该,但需要对表达树有一点了解。我不能真的帮助你。

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