Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/332.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# Linq选择错误_C#_Linq_Dataset - Fatal编程技术网

C# Linq选择错误

C# Linq选择错误,c#,linq,dataset,C#,Linq,Dataset,这是我的密码: DataSet ds = new DataSet(); ds.ReadXml("drivers"); 这是正常代码: var q = from drivers in ds.Tables[0] .Select("EmployeeNumber = " + "0000008823") select (drivers["EmployeeNumber"] + " - " + drivers["Name"]); 相同的代码,但此代码给出一个错误: var

这是我的密码:

DataSet ds = new DataSet();
ds.ReadXml("drivers");
这是正常代码:

var q = from drivers in ds.Tables[0]
        .Select("EmployeeNumber = " + "0000008823")
        select (drivers["EmployeeNumber"] + " - " + drivers["Name"]);
相同的代码,但此代码给出一个错误:

var q = from drivers in ds.Tables[0]
        .Select("EmployeeNumber = " + "0000000023")
        select (drivers["EmployeeNumber"] + " - " + drivers["Name"]);

无法对System.String和System.Int32执行“=”操作

这是我的xml文件:

<?xml version="1.0" encoding="utf-8"?>
  <drivers>
    <Driver>
      <Name>John</Name>
      <EmployeeNumber>0000000023</EmployeeNumber>
    </Driver>
    <Driver>
      <Name>Mike</Name>
      <EmployeeNumber>0000008823</EmployeeNumber>
    </Driver>
</drivers>

约翰
0000000023
迈克
0000008823
我的解决方案是

var q = from drivers in ds.Tables[0]
        .Select("EmployeeNumber = '" + employeeNumber + "'")
        select (drivers["EmployeeNumber"] + " - " + drivers["Name"]);

但我不知道为什么我之前会犯这个错误,你觉得进入Linq到数据集的方式怎么样

var q2 = from drivers in ds.Tables[0].AsEnumerable()
         where drivers.Field<string>("EmployeeNumber") == "0000000023"
         select (drivers["EmployeeNumber"] + " - " + drivers["Name"]);
var q2=来自ds.Tables[0]中的驱动程序
其中drivers.Field(“EmployeeNumber”)=“00000000 23”
选择(驱动程序[“员工编号”]+“-”+驱动程序[“名称”]);

另外一个好处是,如果使用标准的“where”而不是datatable的Select()方法过滤行,则可以轻松地移动到Linq2Sql或Linq2EF。

您可能需要添加运行代码时得到的实际错误。这是运行时错误吗?无法对System.String和System.Int32.Phil执行“=”操作,您是否尝试过“00000000 23”?您可以使用xml序列化使其更清晰。@Бааааааааааааааааааааааа。(>''我的猜测是,对于前导零,它试图将数字
08823
解析为八进制,但如果数字>=8,则它是无效的整数,因此它将其键入字符串。对于有效的八进制数(
023
),它将其键入一个整数(值为35)Stian Standahl,员工编号是双qoutes中的字符串。选择(“EmployeeNumber=“+”00000000 23”)呃…喝了一杯咖啡后,我的octal告诉我,在我上面的评论中,
35
应该是
19
:)这种方法很好,谢谢,但我的sourcewell有什么问题…我无法复制ExeonDev,这是我的简单项目,正如其他人所说的DataTable。选择(字符串)方法尝试对filterexpression“EmployeeNumber=00000000 23”求值,并将参数推断为int。我不知道它在内部是如何工作的。有效的筛选器语法如下: