如何在LINQ中通过ID查找员工

时间:2017-07-25 12:39:46

标签: linq

如何通过ID和第二组找到员工最大和最小时间在id = 1和Date =“2017-05-01”相同行使用LINQ。

 List<bllcls> obj = new List<bllcls>();
        obj.Add(new bllcls { id =1 , Date = Convert.ToDateTime("2017-05-01"),Time="08:00:00" });
        obj.Add(new bllcls { id =1 , Date = Convert.ToDateTime("2017-05-01"),Time="19:00:00"  });
        obj.Add(new bllcls { id =2 , Date = Convert.ToDateTime("2017-05-01"),Time="08:00:00" });
        obj.Add(new bllcls { id =2 , Date = Convert.ToDateTime("2017-05-01"),Time="19:00:00"  });

from(id = 1)

怎么样?

我需要这种格式

Row 1 = ID , DATE ,      MIN TIME  , MAX TIME
col   = 1  , 2017-05-01, 08:00:00  , 19:00:00

Row 2 = ID , DATE ,      MIN TIME  , MAX TIME
col   = 2  ,2017-05-01, 08:00:00  , 19:00:00

2 个答案:

答案 0 :(得分:1)

GroupBy是你的朋友:

var query = obj.GroupBy(x => x.id)
    .Select(grp => new { Id = grp.Key, MinDate = grp.Min(x => x.Date), MaxDate = grp.Max(x => x.Date) });

如果您只想使用指定的Id使用Where

var id1Query = query.Where(x => x.Id == 1); 

如果您只希望使用FirstOrDefaultSingleOrDefault

var id1 = query.FirstOrDefault(x => x.Id == 1); 

答案 1 :(得分:0)

尝试代码

 Var result= ( from p in obj  
               select new
                {
                   Id=p.id,
                   Mindate=obj.where(c=>c.id==p.id).Min(c.date),
                   Maxdate= obj.where(c=>c.id==p.id).Max(c.date),
                 }).Distinct().ToList();