2009-11-07 75 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