3

次の実用的な SQL クエリがあります。

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*

指定された Address 名を持つ Address が、指定された Company ID を持つ会社にリンクされているかどうかをチェックします。

これを LINQ for EF で表現するにはどうすればよいですか?

更新: Address クラスと Company クラスは次のとおりです (この質問に関連する詳細のみが含まれています)。

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;}
}

ありがとうございました。

4

1 に答える 1

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}
于 2012-12-06T10:44:21.637 に答える