我有2個列表。更好的Linq查詢過濾沒有孩子的父列表
var adultList = new List<Dude>();
adultList.Add(new Dude() { ID = 2, Name = "Randy Marsh" });
adultList.Add(new Dude() { ID = 3, Name = "Jimbo Kern" }); // no kids
adultList.Add(new Dude() { ID = 4, Name = "Gerald Broflovski" });
adultList.Add(new Dude() { ID = 5, Name = "Stuart McCormick" });
adultList.Add(new Dude() { ID = 6, Name = "Liane Cartman" });
adultList.Add(new Dude() { ID = 7, Name = "Ned Gerblansky" }); // no kids
var childList = new List<Dude>();
childList.Add(new Dude() { ID = 8, Name = "Stan Marsh", ParentID = 2 });
childList.Add(new Dude() { ID = 9, Name = "Kyle Broflovski", ParentID = 4 });
childList.Add(new Dude() { ID = 10, Name = "Ike Broflovski", ParentID = 4 });
childList.Add(new Dude() { ID = 11, Name = "Kenny McCormick", ParentID = 5 });
childList.Add(new Dude() { ID = 12, Name = "Eric Cartman", ParentID = 6 });
我想要一個Linq查詢返回,返回adultList中沒有任何孩子的任何Dudes。結果列表也應該沒有空條目(在上面的示例中,應該有一個Count()爲2並且只返回Jimbo和Ned)。
var nullList = new List<Dude>();
nullList.Add(null);
var adultsWithNoChildren = adultList.GroupJoin(
childList,
p => p.ID,
c => c.ParentID,
(p, c) =>
{
if (c.FirstOrDefault() == null) return p;
return null;
})
.Except(nullList);
這是完成此操作的最佳方法嗎?還有其他的Linq功能還是其他的? 我不喜歡創建空列表的想法,但這是唯一的確保結果列表有一個準確的計數。
感謝
感謝所有的答覆(安東尼,傑克,盧克)。這是最好的(減去ToList),因爲使用了Any,這對性能可能更好。 – Andre 2010-06-04 00:03:06