i'm learning the book:
LINQ到使用C#4.0LINQ的左连接并在
好对象,我的问题:
我有两个类:联系和CallLog。它看起来像:
public class Contact
{
public string FirstName { get; set; }
public string LastName { get; set; }
public string Email { get; set; }
public string Phone { get; set; }
public DateTime DateOfBirth { get; set; }
public string State { get; set; }
};
public class CallLog
{
public string Number { get; set; }
public int Duration { get; set; }
public bool Incoming { get; set; }
public DateTime When { get; set; }
}
关系:Contact.Phone等于CallLog.Number
二班有方法:sampleData在()。这个metod返回一个简单的列表<>与联系人和通话记录。
List<Contact> contacts = Contact.SampleData();
List<CallLog> callLogs = CallLog.SampleData();
我的查询是:每个联系人有多少个呼叫。
var query2 = (from contact in contacts
join callLog in callLogs on contact.Phone equals callLog.Number into joined
from callLog in joined.Where(p=>p.Incoming == false).DefaultIfEmpty()
select new
{
who = contact.FirstName + " " + contact.LastName + " " + contact.Phone,
how_many = callLog != null ? callLogs.Where(s =>s.Number == contact.Phone).Count() : 0
}).Select(p=>p).Distinct();
foreach (var q in query2)
{
Console.WriteLine(q.who + " " + q.how_many);
}
结果:
汤姆XXXX 555-555-555调用2次
苏菲YYYY 333-333-333调用3次
马克ZZZZ 111-111-111电话0次
现在我想只选择callLog Incoming == true:
var query2 = (from contact in contacts
join callLog in callLogs.Where(p=>p.Incomming == true) on contact.Phone equals callLog.Number into joined
from callLog in joined.Where(p=>p.Incoming == false).DefaultIfEmpty()
select new
{
who = contact.FirstName + " " + contact.LastName + " " + contact.Phone,
how_many = callLog != null ? callLogs.Where(s =>s.Number == contact.Phone).Count() : 0
}).Select(p=>p).Distinct();
foreach (var q in query2)
{
Console.WriteLine(q.who + " " + q.how_many);
}
(看看新QUERY2第二线) 但结果是一样的:
汤姆XXXX 555-555-555调用2次
苏菲YYYY 333-333-333调用3次
Mark ZZZZ 111-111-111要求0次
我该如何解决它?
看起来很相似,你刚才的问题! – DavidG
[查询中的LINQ查询2](http:// stackoverflow。com/questions/24600614/linq-query2-from-query) – DavidG
不!现在我正在使用leftjoin ..我学习,它的坏? – W92