2011-05-30 15 views
26

He entidad llamada de atención al cliente y tiene tres propiedades:combinación interna en LINQ a las entidades

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

también he entidad llamada División y tiene tres propiedades:

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

Ahora necesito escriba un método que obtenga companyId y customerId. El método debe devolver la lista de división que se relaciona con el ID de cliente específico en el ID de la compañía. Algo como esto:

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

En lugar de dividir que haya pegado entidad cliente dos veces .. Por favor arreglar eso – Ankur

+0

@Ankur: Usted derecho - gracias! – Naor

+0

¿Por qué necesita la identificación de la compañía en el método get ... The Splitting tiene ID de cliente que puede usarse para hacer la selección según el ID de cliente pasado – Ankur

Respuesta

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; 

Usando 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

¿Hay alguna forma de escribirlo como una consulta lambda? – Naor

+2

Si te refieres a los métodos de extensión de linq ('Seleccionar', 'Unirme' ... mira mi edición) – manji

2

No es 100% seguro acerca de la relación entre estas dos entidades pero aquí 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

Usted puede encontrar un montón de ejemplos de Linq en Visual Studio. Simplemente seleccione Help -> Samples, y luego descomprima las muestras de Linq.

Abrir la solución muestras LINQ y abrir las LinqSamples.cs de los SampleQueries proyecto.

La respuesta que buscas es en el método 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

Nunca supe obtener muestras directamente en 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(); 
} 
Cuestiones relacionadas