变量的类型应该是什么?

时间:2012-04-02 11:18:51

标签: c# linq

我是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
                       });
        }

5 个答案:

答案 0 :(得分: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,
  ...
}

答案 1 :(得分:1)

您可以使用dynamic但挥手告别智能感知并编制时间检查。

dynamic results;

我唯一一次这样做是因为我正在进行快速而又脏的linqpad查询,而且我不想为它创建一个类。

答案 2 :(得分:0)

这是一种匿名类型。

您可以创建一个具有完全相同字段的类,并根据需要返回该字段。

或者您可以获得返回动态的方法(您将丢失智能感知和编译器类型检查)。

答案 3 :(得分:0)

除非我遗漏了某些内容,否则这些都是匿名类型

你无法施放它,你需要创建一个自定义类并执行

   select new MyNewClass()
                   {
                       SlNo

答案 4 :(得分:0)

这将是匿名类型,特别针对LINQ。 恕我直言 - 最佳做法是返回result.ToList()。