Iは測定が単一のテーブルに保存され、そこからオブジェクトを持っています。ある期間内にオブジェクトが一定の状態になっている期間を調べたいと思います。LINQは、各マッチング結果と次のレコードを選択
ので、希望の状態でレコードを取得に加えて、私はそれらの間の時間を計算するために、同じオブジェクトから作られた次の測定でそれをペアリングする必要があります。
私はこの怪物を思い付いた:// Get the the object entry from Database
MeasuredObject object1;
try
{
object1 = (MeasuredObject)(from getObject in db.MeasuredObject where wantedObject.Id.Equals(getObject.Id) select getObject).Single();
}
catch (System.ArgumentNullException e)
{
throw new System.ArgumentException("Object does not exist", "wantedObject", e);
}
// Get every measurement which matches the state in the time period and the next measurement from it
var pairs = (from m in object1.Measurements
join nextM in object1.Measurements
on (from next in object1.Measurements where (m.Id < next.Id) select next.Id).Min() equals nextM.Id
where 'm is in time period and has required state'
select new { meas = m, next = nextM });
が、私はこれは私がCompact Editionの3.5を使用している場合は特に、非常に効率的ないないようだと言うでしょう。
メートルを通じて次の測定にナビゲートする方法はありますか私は何とかのorderby使用することができますまたはグループは、Idで次を選択しますか?あるいは、結合節をよりシンプルにすることさえできますか?あなたは、メモリのコレクションで作業しているように掲示コードから
、これはエンティティへのオブジェクトへのLINQ、またLINQではありませんが、LINQ to SQLは?そして 'Measurements'はある種の' IQueryable'であり、LINQクエリ全体がSqlServerデータベース内でSQLクエリとして実行されますか? –
私はまだLINQのさまざまな使い方について混乱しています...オブジェクト1はデータベースから取得されています。私は質問にobject1の呼び出しを追加します。しかし、Measurementsは、データベースのobject1への外部キーを持つSQLテーブルです。だから私はこれがLINQ to SQLだと思う。 – Silvyrfir
ええ、私はそれが混乱していることを知っているが、それは現実だ。また、さまざまなソースにはさまざまなソリューションが必要です。ここで最も重要なのは、 'object1.Measurements'プロパティの**タイプ**です。 'IEnumerable'。 'IQueryeble 'など –