2012-04-02 112 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查询,我不想去为它创建一个类的工作。

相关问题