2012-03-26 5 views
0

私の考えは です。分岐番号(int)を入力すると、コンパイラはテーブル(SunToTime)を検索してTime値を取得します。 この値は、同じ行にある別の列(SunFromTime)の時間値を差し引くために使用されます。 したがって、私は時差を得ることができます。問題は、正しいコードをタイプする方法がわからないことです。 SELECTとWHEREコードは私のコードでは動作しません。 any1私のコードを修正する方法を知っていますか?ここに私のコード:テーブルの特定の行を選択して時間差を計算する方法は?

//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

+0

私は、このチュートリアルのインターネットを.Select()と.Where()について検索しました。 "文字列から 'System.Func 'に変換できません '' および '' 'System.Data.DataRow []には' Whereおよび 'の定義が含まれていません。最高の拡張メソッドoverload 'System.Linq.Enumerable.Where (System.Collections.Generic.IEnumerable 、System.Func )'に無効な引数があります – hakunabean

+0

ああ、 LINQメソッドの使い方についてのチュートリアルが必要です。たとえば、 'Select(" SunToTime ")の代わりに' Select(x => x.SunToTime) '、基本的に、結果の各行' x'に対して 'SunToTime'フィールドを選択したいと言っています。しかし、テーブル[] 'コレクションは強力なタイピングの面では、しかし、LINQを使用できるのであれば、最初に 'DataTable'を使用するのはなぜですか?代わりにLINQ to SQLを使用してください。 (チュートリアルを見つけたら、十分に確立されています。) – David

答えて

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がconvertedBranchID
  • に対してRetailCamDataSet1.Tables["smBranchWorkingDayInfo"]のBranchIDを使用してフィルタリングすることがWhereに渡すことであろうとIEnumerableを
  • を返すだろうとSelectに渡され、匿名型のIEnumerableが返されます。私はDataTableのは、それ以来、動作することを信じていませんが、ここでSELECTのためのMSDNとWHERE

    もつともあるSunFromTime

- その匿名型はSunToTimeに相当しますDifferenceValueをという名前のプロパティが含まれます強く型付けされているのではなく、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 
} 

として、あなたは私は上記の方法(マイナスのDataTable)でSQLにLINQを使用する場合のような何かをしたいと思うがあなたはその問題に関するいくつかのチュートリアルを参照する必要があります...彼らはGoogle検索で十分です

関連する問題