2012-03-26 86 views
0

我的想法是这样的: 当我输入一个分号(int)时,编译器将在表中搜索一列(SunToTime)并获取它的时间值。 该值将用于扣除位于同一行的另一列(SunFromTime)时间值。 因此,我可以获得时差。问题是我不知道如何输入正确的代码。 SELECT和WHERE代码在我的代码中不起作用。有没有人知道我该如何解决我的代码?这里是我的代码:如何选择表格的特定行并计算时差?

//This code is wrong. 
DataRow[] sunTimeDifference = 
    RetailCamDataSet1.Tables["smBranchWorkingDayInfo"] 
     .Select("SunToTime") 
     .Where("BranchID=" + convertedBranchID + "") 
    - RetailCamDataSet1.Tables["smBranchWorkingDayInfo"] 
     .Select("SunFromTime").Where("BranchID=" + convertedBranchID + ""); 
+0

我很不熟悉这些'.Select()'和'.Where()'方法,你正在使用。他们是特定图书馆的一部分吗?当你说他们不工作,你能更具体吗?有错误吗? – David 2012-03-26 01:31:30

+0

我在网上搜索了关于.Select()和.Where()的教程。错误与: “无法从字符串转换为'System.Func '” 和 “'System.Data.DataRow []不包含'Where和最好的扩展方法重载'System.Linq.Enumerable.Where (System.Collections.Generic.IEnumerable ,System.Func )'有一些无效的参数 – hakunabean 2012-03-26 01:41:49

+0

哦,这些是' IEnumerable'?雅,你肯定会使用那些错误的,你会想找到一个关于如何使用LINQ方法的教程,例如,而不是'Select(“SunToTime”)''你会想要像'Select(x => x.SunToTime)',基本上说,对于结果中的每一行'x',你都希望选择'SunToTime'字段,我不确定它是如何工作的。尽管如此,表格[]'集合在强类型方面。但是如果你能够使用LINQ,为什么甚至首先使用'DataTable's?改用LINQ to SQL。 (找到它的教程,它是完善的。) – David 2012-03-26 01:49:11

回答

0

您正在尝试使用LINQ语句中似乎走错了路。他们通常通过lambdas采用Func方法。更合适的办法是更多的东西是这样的:

var sunTimeDifference = 
    RetailCamDataSet1.Tables["smBranchWorkingDayInfo"] 
     .Where(retailCam=>retailCam.BranchID == convertedBranchID) 
     .Select(retailCam=>new{DifferenceValue = SunToTime - SunFromTime); 

这假定RetailCamDataSet1.Tables["smBranchWorkingDayInfo"]可强制转换为IEnumerable并且它强类型匹配您的变量,我怀疑的对象。

通常会发生什么情况如下:

  • RetailCamDataSet1.Tables["smBranchWorkingDayInfo"]会返回一个IEnumerable
  • 这IEnumerable的将被传递到Where使用RetailCamDataSet1.Tables["smBranchWorkingDayInfo"]的BranchID来进行筛选convertedBranchID
  • 这将是传入Select并且将返回一个匿名类型的IEnumerable。匿名类型将包含一个名为DifferenceValue属性,将相当于SunToTime - SunFromTime

这里是MSDN的SELECTWHERE

无论其,我不相信一个DataTable会因为它的工作不是强类型的,也不是可以转换为IEnumerable(尽管我对后者的描述并不是100%确定的)。

在这种情况下,你会想要做的事更多类似这样的

DataRow[] result = RetailCamDataSet1.Tables["smBranchWorkingDayInfo"] 
         .Select("BranchID=" + convertedBranchID); 
foreach(DataRow row in result) 
{ 
    var difference = Int.Parse(row["SunToTime"]) - Int.Parse(row["SunFromTime"]); 
    //do something with the difference 
} 

正如大卫提到的,如果你想使用LINQ在我上面提到的方式,SQL(减去数据表),然后你应该查看一些关于这个问题的教程...他们与谷歌搜索