Tôi đang cố gắng đếm số phụ huynh không có con và cha mẹ con. Như tôi đã viết những dòng này tôi nhận ra nó là tốt hơn giải thích với mã .. Vì vậy, ở đây nó đi:Đếm số liên kết cha mẹ làm phẳng trong LINQ
Với các loại ví dụ:
public class Customer
{
public int Id { get; set; }
public string Name { get; set; }
public List<Order> Orders { get; set; }
}
public class Order
{
public int Id { get; set; }
public string Description { get; set; }
}
Và dữ liệu này:
var customers = new List<Customer>
{
new Customer
{
Id = 2,
Name = "Jane Doe"
},
new Customer
{
Id = 1,
Name = "John Doe",
Orders = new List<Order>
{
new Order { Id = 342, Description = "Ordered a ball" },
new Order { Id = 345, Description = "Ordered a bat" }
}
}
};
// I'm trying to get a count of customer orders added with customers with no orders
// In the above data, I would expect a count of 3 as detailed below
//
// CId Name OId
// ---- -------- ----
// 2 Jane Doe
// 1 John Doe 342
// 1 John Doe 345
int customerAndOrdersCount = {linq call here}; // equals 3
tôi đang cố gắng để có được một số 3 trở lại.
Cảm ơn bạn trước sự giúp đỡ của bạn.
-Jessy Houle
thêm vào sau:
Tôi đã thực sự ấn tượng với tất cả các câu trả lời tuyệt vời (và nhanh chóng). Đối với những người khác đến câu hỏi này, tìm kiếm một vài lựa chọn, đây là một bài kiểm tra đơn vị với một vài ví dụ làm việc từ bên dưới.
[TestMethod]
public void TestSolutions()
{
var customers = GetCustomers(); // data from above
var count1 = customers.Select(customer => customer.Orders).Sum(orders => (orders != null) ? orders.Count() : 1);
var count2 = (from c in customers from o in (c.Orders ?? Enumerable.Empty<Order>()).DefaultIfEmpty() select c).Count();
var count3 = customers.Sum(c => c.Orders == null ? 1 : c.Orders.Count());
var count4 = customers.Sum(c => c.Orders==null ? 1 : Math.Max(1, c.Orders.Count()));
Assert.AreEqual(3, count1);
Assert.AreEqual(3, count2);
Assert.AreEqual(3, count3);
Assert.AreEqual(3, count4);
}
Một lần nữa, cảm ơn tất cả vì sự giúp đỡ của bạn!
+1 để cung cấp mã kiểm tra hữu ích. – sloth