您正在嘗試使用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