2011-05-30 3 views
26

kuruluşlara linq katılmak ve üç özelliği vardır: Ben de varlık Bölme çağrıdaMüşteri varlık çağrıda

public class Customer { 
    public virtual Guid CompanyId; 
    public virtual long Id; 
    public virtual string Name; 
} 

ve üç özelliği vardır:

public class Splitting { 
    public virtual long CustomerId; 
    public virtual long Id; 
    public virtual string Name; 
} 

Şimdi ihtiyacımız companyId ve customerId alan bir yöntem yazın. Yöntem, companyId'deki belirli customerId ile ilişkili bölme listesini döndürmelidir.

public IList<Splitting> get(Guid companyId, long customrId) {  
    var res=from s in Splitting 
      from c in Customer 
      ...... how to continue? 

    return res.ToList(); 
} 
+0

.. düzeltmek Lütfen – Ankur

+0

@Ankur o: Haklısınız - teşekkürler! – Naor

+0

Yöntemin alınmasında neden Şirket ID'sine ihtiyacınız var ... Bölünme, müşteri kimliğine bağlı olarak seçim yapmak için kullanılabilecek müşteri kimliğine sahiptir. – Ankur

cevap

69
var res = from s in Splitting 
      join c in Customer on s.CustomerId equals c.Id 
     where c.Id == customrId 
      && c.CompanyId == companyId 
     select s; 

Extension methods Kullanılması: Böyle Burada bir şey bu iki varlık ancak arasındaki ilişki hakkında kesin

var res = Splitting.Join(Customer, 
       s => s.CustomerId, 
       c => c.Id, 
       (s, c) => new { s, c }) 
      .Where(sc => sc.c.Id == userId && sc.c.CompanyId == companId) 
      .Select(sc => sc.s); 
+1

Bunu lambda sorgusu olarak yazmanın bir yolu var mı? – Naor

+2

Eğer linq uzantı yöntemlerini kastediyorsunuz ('Seç ',' Katıl' ... düzenlememe bakın) – manji

2

Değil% 100 gider:

IList<Splitting> res = (from s in [data source] 
         where s.Customer.CompanyID == [companyID] && 
           s.CustomerID == [customerID] 
         select s).ToList(); 

IList<Splitting> res = [data source].Splittings.Where(
          x => x.Customer.CompanyID == [companyID] && 
           x.CustomerID == [customerID]).ToList(); 
5

Sen bulabilirsiniz Görsel stüdyoda bir dizi Linq örneği. Sadece Help -> Samples'u seçip, ardından Linq örneklerini çıkarın.

Açık linq örnekleri çözümü ve LinqSamples.cs SampleQueries projesi açın.

Aradığınız cevap yöntemi Linq14 içinde: Eğer iki kere Müşteri varlık yapıştırılan var Yarma yerine

int[] numbersA = { 0, 2, 4, 5, 6, 8, 9 }; 
int[] numbersB = { 1, 3, 5, 7, 8 }; 

var pairs = 
    from a in numbersA 
    from b in numbersB 
    where a < b 
    select new {a, b}; 
+1

Örnekleri doğrudan VS'de almayı asla bilmem. +1 – ShooShoSha

1
public IList<Splitting> get(Guid companyId, long customrId) {  
    var res=from c in Customers_data_source 
      where c.CustomerId = customrId && c.CompanyID == companyId 
      from s in Splittings_data_srouce 
      where s.CustomerID = c.CustomerID 
      select s; 

    return res.ToList(); 
}