SORU
16 ŞUBAT 2011, ÇARŞAMBA


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
16 ŞUBAT 2011, ÇARŞAMBA


İş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. :(

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • mist64

    mist64

    30 Mayıs 2006
  • Ownage Pranks

    Ownage Prank

    13 AĞUSTOS 2007
  • Ty Moss

    Ty Moss

    20 Kasım 2007