2013-08-15 2 views
0

Я пытаюсь понять, как написать запрос LINQ, который возвращает два списка клиентов, которые зарегистрировались в первый раз, и кто не отметиться на определенную датуОбнаружение повторения и новых клиентов

Cusomters 
- Name (nvarchar) 
- CheckInDate (datetime) 

Я могу написать два отдельных запроса, но можно ли просто использовать один запрос?

+0

Показать код для двух запросов , пожалуйста. –

ответ

1

Это вернет 1 список 2 вида клиента, как вы хотите:

var result = Customers.GroupBy(x=>x.Name) 
         .Where(g=>g.Count()==1 || !g.Any(x=>x.CheckInDate == yourDate)) 
         .SelectMany(x=>x); 

Если вы хотите 2 списка, я думаю, что это будет работать:

var result = Customers.GroupBy(x=> Customers.Count(a=>a.Name == x.Name) == 1 ? 1 : 2) 
         .Select(g=> g.Key == 1 ? g.ToList() : g.Where(x=>!g.Where(a=>a.CheckInDate == yourDate) 
                     .Any(a=>a.Name == x.Name)).ToList()); 
//To get the customers who have first checked in 
var firstCheckedIn = result[0]; 
//To get the customers who didn't check in on a given date 
var notCheckedIn = result[1] 

//or 

var result = Customers.GroupBy(x=> { 
            var c = Customers.Where(a=>a.Name == x.Name); 
            return c.Count() == 1 ? 1 : 
              !c.Any(a=>a.CheckInDate == yourDate) ? 2 : 3; 
            })           
         .Select(g=> g.ToList()).ToList(); 
Смежные вопросы