2012-12-06 2 views
3

나는 다음과 같은 작업 SQL 쿼리를 가지고 :LINQ가 여러 조건에 참여합니까?

제공된 주소 이름과 주소가 제공 회사 ID와 회사에 연결되어있는 경우 확인
select a.Id, a.Name 
from Addresses a join Companies c 
       on c.AddressId = a.Id 
       or c.MailAddressId = a.Id 
       or c.Id = a.CompanyId 
where c.Id = *CompanyId* and a.Name = *AddressName* 

.

LINQ for EF에서 어떻게 표현할 수 있습니까?

업데이트 : 주소와 회사의 클래스는 다음과 같이 (단지이 질문에 관련이 포함되어 사항)입니다

public class Address 
{ 
    public int Id {get; set;} 
    public string Name {get; set;} 
    public int? CompanyId {get; set;} 
    public virtual Company {get; set;} 
} 
public class Company 
{ 
    public int Id {get; set;} 
    public string Name {get; set;} 

    public int AddressId {get; set;} 
    public virtual Address Address {get; set;} 

    public int? MailAddressId {get; set;} 
    public virtual Address MailAddress {get; set;} 

    public virtual ICollection<Address> DeliveryAddresses {get; set;} 
} 

감사합니다.

답변

2

LINQ는 동일한 조인 만 지원합니다. 다른 경우에는 크로스 조인을 사용해야합니다.

from a in Addresses 
from c in Companies 
where (c.AddressId == a.Id || c.MailAddressId == a.Id || c.Id == a.CompanyId) 
     && (c.Id == *CompanyId* && a.Name == *AddressName*) 
select new{a.Id, a.Name} 
+0

+1 답장으로 나를 이길 수 있습니다! –

+0

또는'Join'에서 커스텀'Comparer'을 사용할 수 있습니다. –

+0

그래, 그것도 작동해야하지만, 쿼리를 사용할 수 없을 것입니다, 확장 메서드를 사용해야합니다 –

관련 문제