2

選択されている特定のアイテムが最初であるかどうかを理解するクエリ式を作成するにはどうすればよいでしょうか。DBから10個のアイテムを選択しているとします。

var query = db.Table.Take(10).Select(t => IsFirst ? t.Value1 : t.Value2);

Selectにはインデックス付きのバリアントがありますが、LINQ-to-SQLではサポートされていません。それがサポートされていれば、私の問題は解決されるでしょう。他にトリックはありますか?

ROW_NUMBER()たとえば、LINQ-to-SQLが使用するがアクセスを許可しないT-SQLで使用することもできます。

2つのクエリを実行して、最初の式などで最初の式を使用できることはわかってConcatいますが、クエリは複数の場所で作成されており、これが必要な場所であるため、クエリの残りの部分を操作する必要はありません。selectステートメント自体だけです。最初の行で異なる動作をします。それが不可能な場合は、他のオプションを検討します。

4

2 に答える 2

2

インデックス付きのオーバーロードを使用できますが、LINQtoObjectsバージョンを使用する必要があります。

var query = 
    db.Table.Take(10).AsEnumreable()
    .Select((t, index) => index == 0 ? t.Value1 : t.Value2);
于 2012-05-11T08:48:18.927 に答える
1

Table主キーがある場合。あなたはこれを行うことができます:

var result= (
        from t in db.Table.Take(10)
        let first=db.Table.Take(10).Select (ta =>ta.PrimayKey).First()
        select new
        {
            Value=(t.PrimaryKey=first?t.Value1 : t.Value2)
        }
    );
于 2012-05-11T08:54:46.200 に答える