2012-03-26 91 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(減去數據表),然後你應該查看一些關於這個問題的教程...他們與谷歌搜索