2017-07-25 12 views
-2

如何通過ID和第二組找到員工最大和最小時間,其中id = 1和Date =「2017-05-01」使用LINQ的同一行。如何在LINQ中通過ID查找員工

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" }); 

從(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 
+0

顯示你到目前爲止已經試過什麼,在哪裏,你有問題 – Nkosi

回答

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); 
+0

感謝,並告訴我如何在列表 OBJ = obj.GroupBy(X retun => x.id).Select(grp => new {Id = grp.Key,MinDate = grp.Min(x => x.Date),MaxDate = grp.Max(x => x.Date)})。 ToList(); – hamza

+0

@hamza:你想要一個新的'清單'? –

+0

是的,我想保存到新列表中 obj1; – hamza

0

try代碼

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();