-2

データベースにいくつかのテーブルがあります。INV、、データ型3テーブルLIBTRAN_TT1すべてのフィールドは文字列です。私はこのコードを書きます

 var m = new MaterialModelContainer();
            var list = (from inv in m.INVs
                        where inv.NEW_QTY == "000000"
                        join lib in m.LIBs on inv.MESC equals lib.MESC
                        join tt1 in m.TRAN_TT1 on inv.MESC equals tt1.MESC4
                        where tt1.TYPE2 == "60" && tt1.QTY == "000000" 
                       select new
                                   {
                                       inv.MESC,
                                       lib.LINE_NO,
                                       lib.UNIT_LINE,
                                       Description = lib.DES + " " + lib.PART_NO,

                                   }).ToList();

テーブルTRAN_TT1にはACTDフィールドがあり、最大値を取得したい
このコードを記述します

 var m = new MaterialModelContainer();
            var list = (from inv in m.INVs
                        where inv.NEW_QTY == "000000"
                        join lib in m.LIBs on inv.MESC equals lib.MESC
                        join tt1 in m.TRAN_TT1 on inv.MESC equals tt1.MESC4
                        where tt1.TYPE2 == "60" && tt1.QTY == "000000" 
                       select new
                                   {
                                       inv.MESC,
                                       lib.LINE_NO,
                                       lib.UNIT_LINE,
                                       Description = lib.DES + " " + lib.PART_NO,
                                     ACTD=  tt1.ACTD.Max()
                                   }).ToList();

しかし、仕事はありません、

最大ACTDフィールドを取得するのを手伝ってください。皆さんありがとう

4

4 に答える 4

1

どうですか

ACTD = tt1.ACTD.Max(x => x);
于 2012-08-20T05:16:31.167 に答える
1

わかりませんが、エラーから試してみてください

ACTD= ((int?) tt1.ACTD).Max()
于 2012-08-20T06:17:24.540 に答える
1

Maxは集計関数であり、Linqの集計関数にはSQLと同じ制限があります(列の1つに集計関数を使用する場合)、他のすべての使用列も集計関数で使用するか、GroupByを使用する必要があります。したがって、サンプルは次のようになります。

var m = new MaterialModelContainer();
            var list = (from x in 

                       (from inv in m.INVs
                        where inv.NEW_QTY == "000000"
                        join lib in m.LIBs on inv.MESC equals lib.MESC
                        join tt1 in m.TRAN_TT1 on inv.MESC equals tt1.MESC4
                        where tt1.TYPE2 == "60" && tt1.QTY == "000000" 
                        select new {inv.MESC, lib.LINE_NO, lib.UNIT_LINE, Description = lib.DES + " " + lib.PART_NO, tt1.ACTD})

                        group by new {x.MESC, x.LINE_NO, x.UNIT_LINE, x.Description} into g
                        select new {g.Key.MESC, g.Key.LINE_NO, g.Key.UNIT_LINE, g.Key.Description, ACTDMax = g.Max(tt2 => tt2.ACTD) } );
于 2012-08-20T06:28:05.880 に答える
0

最大ACTD値を取得するためにこのコードを書くことができます

  var m = new MaterialModelContainer();
            var list = (from x in

                            (from inv in m.INVs
                             where inv.NEW_QTY == "000000"
                             join lib in m.LIBs on inv.MESC equals lib.MESC
                             join tt1 in m.TRAN_TT1 on inv.MESC equals tt1.MESC4
                             where tt1.TYPE2 == "60" && tt1.QTY == "000000"
                             select
                                 new
                                     {
                                         inv.MESC,
                                         lib.LINE_NO,
                                         lib.UNIT_LINE,
                                         Description = lib.DES + " " + lib.PART_NO,
                                         tt1.ACTD
                                     })

                        group x by new {x.MESC, x.LINE_NO, x.UNIT_LINE, x.Description}
                        into g
                        select
                            new
                                {
                                    g.Key.MESC,
                                    g.Key.LINE_NO,
                                    g.Key.UNIT_LINE,
                                    g.Key.Description,
                                    ACTDMax = g.Max(tt2 => tt2.ACTD)
                                }
                                ).OrderBy(c=>c.MESC).ToList();
于 2012-08-20T06:54:03.637 に答える