あなたは間違った方法で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検索で十分です
私はこれらの '.Select()'と '.Where()'メソッドに慣れていません。彼らは特定の図書館の一部ですか?彼らが働かないと言ったら、もっと具体的になりますか?エラーはありますか? – David
私は、このチュートリアルのインターネットを.Select()と.Where()について検索しました。 "文字列から 'System.Func'に変換できません '' および '' 'System.Data.DataRow []には' Whereおよび 'の定義が含まれていません。最高の拡張メソッドoverload 'System.Linq.Enumerable.Where (System.Collections.Generic.IEnumerable 、System.Func )'に無効な引数があります –
hakunabean
ああ、 LINQメソッドの使い方についてのチュートリアルが必要です。たとえば、 'Select(" SunToTime ")の代わりに' Select(x => x.SunToTime) '、基本的に、結果の各行' x'に対して 'SunToTime'フィールドを選択したいと言っています。しかし、テーブル[] 'コレクションは強力なタイピングの面では、しかし、LINQを使用できるのであれば、最初に 'DataTable'を使用するのはなぜですか?代わりにLINQ to SQLを使用してください。 (チュートリアルを見つけたら、十分に確立されています。) – David