将DataTable转换为LINQ:无法查询多个字段
问题描述:
导入电子表格我用这些数据填充了DataTable对象并返回预期结果。将DataTable转换为LINQ:无法查询多个字段
试图把这个变成一种格式,我可以很容易地查询到搜索问题记录我做了以下
public void Something(DataTable dt)
{
var data = from row in dt.AsEnumerable()
select row["Order"].ToString();
}
按预期工作给我的订单列表。但是我不能将其他字段添加到此EnumerableRowCollection。尝试添加其他字段如下给我一个错误
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();
}
错误:“名为‘行’的局部变量不能在此范围内声明,因为它会给予不同的意义,这是已经在使用‘行’一个'孩子'范围捐赠别的东西“
我想我需要别名列名,但我没有运气。我在这里错过了什么?
答
这听起来像你正在写一个坏的选择语句。请尝试以下操作:
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()
};
}
这将创建一个匿名类型对象的新集合,您可以根据需要迭代并使用它。请记住,尽管如此,您希望能够从该函数返回data
。如果你需要这个功能,你需要创建一个具体的类型来使用(代替匿名类型)。
+0
是的,我忘记了新的关键字。仍然不习惯这些匿名代表和所有这些,我忘了。谢谢! – Mohgeroth 2010-07-27 13:21:40
答
我认为你应该使用新的选择这样的查询,例如:
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)
};
答
您可能想要以下内容。
var data = from row
in dt.AsEnumerable()
select new { Order = row["Order"].ToString(), Version = row["Version"].ToString() };
如果你发布*失败的*代码,而不仅仅是没有做到你想要的代码,这真的会有帮助。 – 2010-07-27 13:15:23
已经在那:) – Mohgeroth 2010-07-27 13:15:45
您正在使用变量名“行”两次。也许你应该发布代码失败的完整示例,以便我们可以帮助你。 – sloth 2010-07-27 13:16:58