Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将DataTable转换为LINQ:无法查询多个字段_C#_Linq_Datatable - Fatal编程技术网

C# 将DataTable转换为LINQ:无法查询多个字段

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

导入电子表格时,我已经用该数据填充了DataTable对象,并返回了预期结果

尝试将其转换为我可以轻松查询的格式以搜索问题记录,我已完成以下操作

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() };

如果您发布失败的代码,而不仅仅是不符合您要求的工作代码,这将非常有帮助。也许你应该发布一个失败代码的完整示例,这样我们可以帮助你。是的,我忘记了新的关键字。我还不习惯这些匿名代表,我忘了。谢谢