我是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
});
}
答案 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()。