Seri - SelectMany Karışıklık
SelectMany bu belgelerden anladığım kadarıyla, 1-çok ilişkisi (düzleştirilmiş) bir dizi üretmek için kullanabilir.
Dersleri takip ettim
public class Customer
{
public int Id { get; set; }
public string Name { get; set; }
}
class Order
{
public int Id { get; set; }
public int CustomerId { get; set; }
public string Description { get; set; }
}
Ben o zaman onları kullanmak gibi yani sorgu ifade sözdizimi kullanmayı deneyin
var customers = new Customer[]
{
new Customer() { Id=1, Name ="A"},
new Customer() { Id=2, Name ="B"},
new Customer() { Id=3, Name ="C"}
};
var orders = new Order[]
{
new Order { Id=1, CustomerId=1, Description="Order 1"},
new Order { Id=2, CustomerId=1, Description="Order 2"},
new Order { Id=3, CustomerId=1, Description="Order 3"},
new Order { Id=4, CustomerId=1, Description="Order 4"},
new Order { Id=5, CustomerId=2, Description="Order 5"},
new Order { Id=6, CustomerId=2, Description="Order 6"},
new Order { Id=7, CustomerId=3, Description="Order 7"},
new Order { Id=8, CustomerId=3, Description="Order 8"},
new Order { Id=9, CustomerId=3, Description="Order 9"}
};
var customerOrders = from c in customers
from o in orders
where o.CustomerId == c.Id
select new
{
CustomerId = c.Id
, OrderDescription = o.Description
};
foreach (var item in customerOrders)
Console.WriteLine(item.CustomerId ": " item.OrderDescription);
Bu ihtiyacım olan şey verir.
1: Order 1
1: Order 2
1: Order 3
1: Order 4
2: Order 5
2: Order 6
3: Order 7
3: Order 8
3: Order 9
Bu sorgu ifade sözdizimi kullanarak SelectMany yöntemi kullanarak çevirir herhalde.
Ya yollar, SelectMany kullanarak kafamda bir yere oturtmaya çalışıyorum. Eğer öyleyse benim yukarıda sorgu SelectMany çevirmek için değilse bile, iki sınıf ve sahte veriler göz önüne alındığında, birisi SelectMany kullanan seri bir sorgu ile bana sağlayabilir?
CEVAP
İşte sorgu SelectMany
tam olarak senin örnek modellenmiş kullanarak. Aynı çıktı!
var customerOrders2 = customers.SelectMany(
c => orders.Where(o => o.CustomerId == c.Id),
(c, o) => new { CustomerId = c.Id, OrderDescription = o.Description });
İlk argüman siparişler tamamen analagous 'nerede' zaten bir madde). için bir koleksiyon için her müşteri haritalar
İkinci bağımsız değişken dönüşümleri her eşleşen çifti {(c1, o1), (c1, o2) .. (c3, o9)} içine yeni bir tür, hangi yaptım aynı senin gibi örnek.
Yani:
- başka bir toplama için temel koleksiyonunda arg1 haritalar her öğe.
- arg2 (isteğe bağlı) yeni bir tür içine her çift dönüştürür
Elde edilen tahsilat orijinal örnekte beklediğiniz gibi düz.
Eğer ikinci bağımsız değişkeni ihmal edersen, bir müşteri için tüm siparişlerin bir koleksiyon maç ile sona erecekti. Sadece o olur, Order
düz bir koleksiyon nesneleri.
Alışmak çok zaman alır kullanarak, hala sorun kafamda bazen sarma var. :(
Nasıl bir ÇAPRAZ SERİ ile SQL BİRLEŞTİ...
Seri sınıfı özelliği ile farklı...
Dize seri hale getirmek için nesne...
Nasıl Linux üzerinde tüm seri cihazlar...
Seri hale getirmek dize JavaScript/jQu...