C# 将DataTable转换为LINQ:无法查询多个字段
导入电子表格时,我已经用该数据填充了DataTable对象,并返回了预期结果 尝试将其转换为我可以轻松查询的格式以搜索问题记录,我已完成以下操作C# 将DataTable转换为LINQ:无法查询多个字段,c#,linq,datatable,C#,Linq,Datatable,导入电子表格时,我已经用该数据填充了DataTable对象,并返回了预期结果 尝试将其转换为我可以轻松查询的格式以搜索问题记录,我已完成以下操作 public void Something(DataTable dt) { var data = from row in dt.AsEnumerable() select row["Order"].ToString(); } 按预期工作,给我一份订单清单。但是,我无法将其他字段添加到此EnumerablerR
public void Something(DataTable dt)
{
var data = from row in dt.AsEnumerable()
select row["Order"].ToString();
}
按预期工作,给我一份订单清单。但是,我无法将其他字段添加到此EnumerablerRowCollection。尝试按如下方式添加其他字段时出错
public void Something(DataTable dt)
{
// row["Version"] throws an error on me
var data = from row in dt.AsEnumerable()
select row["Order"].ToString(), row["Version"].ToString();
}
错误:“无法在此作用域中声明名为“row”的局部变量,因为它将赋予“row”不同的含义,而“row”已在“child”作用域中用于其他内容”
我想我需要给列名加个别名,但我运气不好。我在这里遗漏了什么?我认为您应该使用select new,如以下查询:
var q = from o in db.Orders
where o.Products.ProductName.StartsWith("Asset") &&
o.PaymentApproved == true
select new { name = o.Contacts.FirstName + " " +
o.Contacts.LastName,
product = o.Products.ProductName,
version = o.Products.Version +
(o.Products.SubVersion * 0.1)
};
听起来你在写一个糟糕的select语句。请尝试以下操作:
public void Something(DataTable dt)
{
var data = from row in dt.AsEnumerable()
select new {
Order = row["Order"].ToString(),
Something = row["Something"].ToString(),
Customer = row["Customer"].ToString(),
Address = row["Address"].ToString()
};
}
这将创建一个新的匿名类型对象集合,您可以根据需要对其进行迭代和使用。但是请记住,您希望能够从函数返回
数据。如果您需要该功能,您需要创建一个具体的类型来使用(代替匿名类型)。您可能需要以下内容
var data = from row
in dt.AsEnumerable()
select new { Order = row["Order"].ToString(), Version = row["Version"].ToString() };
如果您发布失败的代码,而不仅仅是不符合您要求的工作代码,这将非常有帮助。也许你应该发布一个失败代码的完整示例,这样我们可以帮助你。是的,我忘记了新的关键字。我还不习惯这些匿名代表,我忘了。谢谢