-2

我在数据库中有一些表。INV, LIB,TRAN_TT1数据类型 3 表中的所有字段都是字符串。我写这段代码

 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

Max 是一个聚合函数,Linq 中的聚合函数与 SQL 中的聚合函数具有相同的限制 - 如果您对其中一列使用聚合函数 - 所有其他使用列也应该在聚合函数中使用,或者您应该由它们使用 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 回答
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 回答
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 回答