如何在linq中获得最大值

时间:2012-08-20 05:10:46

标签: c# linq entity-framework

我在dataBase中有一些表。 INVLIBTRAN_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 个答案:

答案 0 :(得分:1)

怎么样

ACTD = tt1.ACTD.Max(x => x);

答案 1 :(得分:1)

不确定,但是错误 尝试

ACTD= ((int?) tt1.ACTD).Max()

答案 2 :(得分: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) } );

答案 3 :(得分:0)

您可以为get max 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();