2011-05-30 5 views
26

je entité appelée client et il a trois propriétés:intérieure se joindre à LINQ aux entités

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

J'ai aussi entité appelée Fractionnement et il a trois propriétés:

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

Maintenant je dois écrire une méthode qui obtient companyId et customerId. La méthode doit renvoyer la liste de division qui se rapporte au customerId spécifique dans companyId. Quelque chose comme ceci:

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

Au lieu de Fractionnement vous avez collé entité client deux fois .. S'il vous plaît fixer que – Ankur

+0

@Ankur: Vous avez raison - merci! – Naor

+0

Pourquoi avez-vous besoin ID de la société dans la méthode obtenir ... Le fractionnement a client ID qui peut être utilisé pour faire la sélection basée sur ID client passé – Ankur

Répondre

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; 

En utilisant Extension methods:

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

Existe-t-il un moyen de l'écrire en tant que requête lambda? – Naor

+2

Si vous voulez dire les méthodes d'extension linq ('Select',' Join' ... regardez ma modification) – manji

2

pas à 100% sûr de la relation entre ces deux entités, mais ici va:

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

Vous pouvez trouver tout un tas d'exemples de Linq en studio visuel. Sélectionnez simplement Help -> Samples, puis décompressez les échantillons Linq.

Ouvrez la solution d'échantillons de LINQ et ouvrir les LinqSamples.cs des SampleQueries projet.

La réponse que vous cherchez est dans la méthode Linq14:

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

Je n'ai jamais eu connaissance d'échantillons directement dans VS. +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(); 
} 
Questions connexes