Linq Min in Select new & Multiple GroupBy columns

本文关键字:Multiple GroupBy columns amp Min in Select new Linq | 更新日期: 2023-09-27 18:12:56

我想在Linq中编写以下查询

INSERT INTO INOUTNEW (CODE,INDATE,TIME_DATE1,INOUTFLAG,TIME_FLD1,TIME_FLD2,TIME_FLD3) 
SELECT CODE,MIN(INDATE),TIME_DATE1,'I',TIME_FLD1,TIME_FLD2,'31/05/2015' FROM INOUT 
WHERE TIME_FLD1='T0003' AND INDATE >= '31/05/2015' AND INDATE <= '31/05/2015' 
AND TIME_DATE1='31/05/2015' 
GROUP BY CODE,TIME_DATE1,TIME_FLD1,TIME_FLD2

所以我正在尝试这个:-

var data = ctx.tblInOut.Where(m => m.CompanyId == companyId && m.Time_Field1 == item.ShiftCode && m.InDate == StrInStart && m.InDate <= StrInEnd && m.Time_Date1 == InputDate).Select(m =>
                            new
                            {
                                EmployeeId = m.EmployeeId,
                                InDate = Min(m.InDate),
                                Time_Date1 = m.Time_Date1,
                                InOutFlag = m.InOutFlag    
                            }).ToList();

我被困在Min部分。如何在选择中获得Min ?如何在Linq中添加多个GroupBy ?

Linq Min in Select new & Multiple GroupBy columns

试试这样:

var data = ctx.tblInOut
.Where(m => 
    m.CompanyId == companyId && 
    m.Time_Field1 == item.ShiftCode && 
    m.InDate == StrInStart && 
    m.InDate <= StrInEnd && 
    m.Time_Date1 == InputDate
)
.GroupBy(m =>
    new {
        m.Code,
        m.Time_Date1,
        m.Time_FLD1,
        m.Time_FLD2
})
.Select(g =>
new
{
    m.Key.Code,
    InDate = m.Min(gg => gg.InDate),
    m.Key.Time_Date1,
    Something = "I",
    m.Key.Time_FLD1,
    m.Key.Time_FLD2,
    SomeDate = "31/05/2015"
}).ToList();

要获得Min,必须先分组-否则它会尝试在单个元素上调用Min

.Key只是引用组的键(在本例中,是一个由Code, Date1, Time_FLD1, Time_FLD2组成的元组)