2012-08-08 63 views
1

我有LINQ查詢的問題...如何添加靜態的LINQ查詢

我在列表retriving數據

public List<Station_Master> GetAllStations() 
    { 
     var stationlist = from s in dc.Station_Masters 
          select s; 
     return stationlist.ToList(); 

    } 

但在這裏我表Station_Masters包含一個狀態字段的數據類型爲int ..

名單會給我所有記錄表,包括狀態...

但我需要顯示狀態爲字符串...

我的意思是如果狀態爲0,那麼它將返回「活動」,如果它是1,則它將返回「非活動」

我該如何做到這一點?

+0

不清楚你想要什麼 – 2012-08-08 10:18:01

+0

在Station_Master中創建一個只讀屬性「StatusString」。下面的@James回答。 – devundef 2012-08-08 10:18:29

+0

將字符串狀態添加到數據模型中的任何內容幾乎肯定是一件錯誤的事情,如果您只需要顯示不同的狀態:這不是一個合適的層。活動/非活動狀態的解釋應留給顯示層。 – dasblinkenlight 2012-08-08 10:22:10

回答

7

有相當多的,你可以做到這一點的方式,一個例子是延長Station_Master類暴露,將返回你的狀態的字符串表示的屬性:

public partial class Station_Master 
{ 
    public string StatusText 
    { 
     get 
     { 
      switch (Status) 
      { 
       case 0: 
        return "Active"; 
       case 1: 
        return "Inactive"; 
       default: 
        return "Unknown"; 
      } 
     } 
    } 
} 
+0

+1好點 - 將數據問題與演示文稿分開總是更好 – 2012-08-08 10:22:40

+0

如果您可以擴展原始類別,這也是我的解決方案的有效替代 – 2012-08-08 10:23:48

+0

@MatteoMosca此解決方案更有效,因爲不需要創建任何類型的DTO,OP的代碼將按原樣工作。 – James 2012-08-08 10:43:30

0

您需要創建一個DTO,其中Status是一個字符串而不是一個整數,並將所有其他屬性作爲原始對象。

然後你的方法可以簡單:

return dc.Station_Masters 
.Select(c => new CustomObject 
{ 
//Map all other fields and then remap the status 
Status = c.Status == 0 ? "Active" : "Inactive" 
}); 

但是,這是因爲,如果將提取爲了重新映射他們都從表中的行效率低下。只有在對其進行過濾之後,才能應用Select轉換。

+0

這個查詢是否會返回包含狀態的所有列記錄? – 2012-08-08 10:23:21

+0

是的,但您需要使用select語句手動重新映射所需的所有屬性。爲了簡單起見,我省略了它們。您所能做的最好的事情就是根據需要過濾數據,然後使用select語句在新窗體中進行投影,如果需要,可以創建狀態列和其他列。 – 2012-08-08 10:26:38

0

我認爲最好將「活動/不活動」說明遠離數據檢索邏輯。 正如@詹姆斯所建議的 - 只是擴展你的類並顯式編譯描述屬性。