您正在尝试使用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的SELECT和WHERE
无论其,我不相信一个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(减去数据表),然后你应该查看一些关于这个问题的教程...他们与谷歌搜索
我很不熟悉这些'.Select()'和'.Where()'方法,你正在使用。他们是特定图书馆的一部分吗?当你说他们不工作,你能更具体吗?有错误吗? – David 2012-03-26 01:31:30
我在网上搜索了关于.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
哦,这些是' IEnumerable'?雅,你肯定会使用那些错误的,你会想找到一个关于如何使用LINQ方法的教程,例如,而不是'Select(“SunToTime”)''你会想要像'Select(x => x.SunToTime)',基本上说,对于结果中的每一行'x',你都希望选择'SunToTime'字段,我不确定它是如何工作的。尽管如此,表格[]'集合在强类型方面。但是如果你能够使用LINQ,为什么甚至首先使用'DataTable's?改用LINQ to SQL。 (找到它的教程,它是完善的。) – David 2012-03-26 01:49:11