2012-04-02 150 views
0

我是linq的新手。應該是什麼類型的變量?

我的代碼如下。我需要給結果變量的類型。它應該是什麼?

我試着將results= Enumerable.Emoty<DataRow>();和鑄造結果分配到DataRow。但鑄造失敗。

任何人都可以這樣說嗎?

var results; 

     if (rbtnSystemTypes.IsChecked == true) 
     { 
      results = (from DataRow dr in objDataTable.Rows 
         let Markets = dr.Field<bool>("IsActiveMarkets") == true ? "Active" : "Inactive" 
         let Budgets = dr.Field<bool>("IsActiveBudgets") == true ? "Active" : "Inactive" 
         let Programs = dr.Field<bool>("IsActivePrograms") == true ? "Active" : "Inactive" 
         select new 
         { 
          SlNo = objDataTable.Rows.IndexOf(dr) + 1, 
          Country = dr.Field<string>("SystemType"), 
          Market = dr.Field<string>("Market"), 
          ProgramType = dr.Field<string>("JDFType"), 
          Markets = Markets, 
          Budgets = Budgets, 
          Programs = Programs 
         }); 

     } 
     else 
     { 
      results = (from DataRow dr in objDataTable.Rows 
         let Markets = dr.Field<bool>("IsActiveMarkets") == true ? "Active" : "Inactive" 
         let Budgets = dr.Field<bool>("IsActiveBudgets") == true ? "Active" : "Inactive" 
         let Programs = dr.Field<bool>("IsActivePrograms") == true ? "Active" : "Inactive" 
         select new 
         { 
          SlNo = objDataTable.Rows.IndexOf(dr) + 1, 
          SubSystemType = dr.Field<string>("SubSystem"), 
          Market = dr.Field<string>("Market"), 
          SystemType = dr.Field<string>("SystemType"), 
          Markets = Markets, 
          Budgets = Budgets, 
          Programs = Programs 
         }); 
     } 
+1

您是否期待從匿名對象到DataRow的魔法轉換?如果是這樣,你運氣不好。 – leppie 2012-04-02 11:21:02

回答

1

你創建你select條款的anonymous type - 這些都沒有具體的名稱(因此匿名)。

創建一個類來保存結果並將其用作結果中的類型。

public MarketData 
{ 
    public int SlNo { get; set; } 
    public string SubSystemType { get; set; } 
    ... 
} 

// in the queries: 
select new MarketData 
{ 
    SlNo = objDataTable.Rows.IndexOf(dr) + 1, 
    ... 
} 
+0

這和這個問題的DataRow要求是如何吻合的? – leppie 2012-04-02 11:23:44

+0

@leppie - 我讀到的問題是OP_tried_ cast到'DataRow'作爲失敗嘗試的一部分,以鑄造成已知類型,而不是它的要求。 – Oded 2012-04-02 11:25:45

0

這是一個匿名類型。

您可以創建一個具有完全相同字段並返回的類,如果需要的話。

或者您可以獲得返回動態的方法(您將失去智能感知和編譯器類型檢查)。

0

除非我失去了一些東西,這些都是匿名類型

你可以不投,你需要創建一個自定義類,做一個

select new MyNewClass() 
        { 
         SlNo 
0

這將是匿名類型,尤其是特色,以LINQ 。恕我直言 - 最佳做法是返回result.ToList()。

1

您可以使用dynamic,但揮手告別智能感知和編譯時檢查。

dynamic results; 

我做到這一點的唯一的一次是當我在做快速和骯髒的linqpad查詢,我不想去爲它創建一個類的工作。

相關問題