2

こんにちは皆さん、私はこの SQL クエリ (MSSQL) を持っています。結合の結果が結果の重複なしで日付ごとに最新の行の「トップ」行を与えるクエリを実行しています。私はhttp://goo.gl/Uv0FRをやっています 事はこれです, 私はすでに SQL クエリを達成しています. ('','') 重複なし

Select * from PlazaI pi
join (
    Select * from PlazaE pe where 
    NOT EXISTS(SELECT 1 FROM PlazaE pe1 
    WHERE pe.Id_plaza = pe1.Id_plaza AND pe1.Fecha > pe.Fecha AND pe1.Fecha < GETDATE() and pe1.Id_Emp != 0) 
) pe on pe.Id_plaza = pieepo.Id_plaza
join Emp e on pe.Id_Emp = e.Id_Emp
join View ct on ct.Id_Nodo = pe.id_nodo
where pi.PlazaIe in ('value1','value2')

問題は、SQL から LINQ に変換しようとしてもうまくいかないことです。(私はこの Linq の世界では初めてです)

以下は私のlinqクエリです。

var q1 = (from pe in db.PlazaEmpleados 
               where !db.PlazaEmpleados.Any
                                    (
                                     pe1 => (pe1.Id_plaza.Equals(pe.Id_plaza) && pe1.Fecha > pe.Fecha && pe1.Id_Emp != 0 && pe1.Fecha > DateTime.Now)
                                    ) select pe);

    var q2 = (from pi in db.Context
              join pe in (q1) on pi.Id_plaza equals pe.Id_plaza
                select new EmpVO
                  {
                    Id_Nodo = pe.id_nodo,
                    Id_plaza = pi.PlazaSome,
                    Num_Plaza = pi.Id_plaza,
                  }); 

このlinq2sqlクエリを実行すると、値ごとに1つだけではなく、重複した結果が得られます。つまり、誰かがSQLクエリをLINQクエリに適切に変換できるかどうか、またはエラーの場所を教えてくれるかどうかを知りたいのです。

前もって感謝します。

4

4 に答える 4

6

日付のチェックは異なります:

リンク:

pe1.Fecha > DateTime.Now

SQL:

pe1.Fecha < GETDATE()

あなたのLINQは次のようになっていませんか:

pe1.Fecha < DateTime.Now
于 2012-11-22T17:22:32.970 に答える
1

私の問題を解決する答えが見つからなかったので、最終的にやったのは

db.ExecuteQuery<ObjectVO>(sqlQuery);

これがベストプラクティスではないことはわかっています。また、SQLクエリとLINQクエリが同じ結果セットを取得しない理由を解決しませんが、以前の回答はそうではありませんでした。

もう 1 つのことは、複雑さが増したクエリ (新しいビジネス ロジックの要件) が 7 つのテーブルに参加し、最大日付を検索する必要があり、移動がその一部であるため、クエリを linq to sql に変換するのがより複雑になることです。

ご支援ありがとうございます。

于 2012-11-28T18:13:52.420 に答える
0

SQLクエリをストアドプロシージャに配置し、コンテキストに追加します。次に、電話するだけです。

var q = context.MyProcedure(new object[] {"value1","value2"});
于 2012-11-25T09:43:49.580 に答える
0

この部分:

var q1 =  from pe in db.PlazaEmpleados 
          where !db.PlazaEmpleados.Any
           (pe1 => 

            pe1.Id_plaza.Equals(pe.Id_plaza) && 
            pe1.Fecha > pe.Fecha &&
            pe1.Id_Emp != 0 && 
            pe1.Fecha < DateTime.Now
           ) 
          select pe;

SQL では、最初に PlazaI を使用し、次に PlazaE を使用します。Linq では、両方とも PlazaEmpleados を使用します。

于 2012-11-23T14:27:13.780 に答える