0

プロジェクトに問題があります。特定の国または都市にある企業のリストを取得しようとしています。

テーブル構造:

会社

CompanyID
CompanyName
etc…

CompanyAddressDetails(関係テーブル)

Company_CompanyID
CorrespondingAddress_AddressID

対応する住所

AddressID
StreetName
RegionID
etc…

領域

RegionID
RegionName
RegionRegionTypeID

RegionDetails(関係テーブル)

RegionParent
RegionChild

したがって、ストックホルムの例(RegionテーブルにID 1198がある)で住所を見つけるには、次のようにします。

var addresses = from c in db.CorrespondingAddress select c;
addresses = addresses.Where(s => s.RegionID.Equals(1198));

そしてストックホルムで会社を見つけるために私はします:

companyModel = from c in db.Company select c;
companyModel =  companyModel.Where(s => s.CorrespondingAddress.Any(x => x.RegionID.Equals(1198)));

しかし、ここで、RegionDetailsテーブル(親と子があります。たとえば、1(スウェーデン)が親で、1198(ストックホルム)が子など)を考慮に入れたいと思います。

スウェーデンにあるが、住所行にID 1198(ストックホルム)がある会社を見つけるにはどうすればよいですか?

プレーンSQLでは、おそらく次のようなことをします。

SELECT CompanyName FROM Company
LEFT JOIN CompanyAddressDetails ON (Company.CompanyID = CompanyAddressDetails.Company_CompanyID)
LEFT JOIN CorrespondingAddress ON (CompanyAddressDetails.CorrespondingAddress_AddressID = CorrespondingAddress.AddressID)
LEFT JOIN Region ON (CorrespondingAddress.RegionID = Region.RegionID)
WHERE CorrespondingAddress IN (SELECT RegionChild FROM RegionDetails WHERE RegionParent = 1)
4

2 に答える 2

0

まず、次のコードを1行にリファクタリングできます。

companyModel = from c in db.Company select c;
companyModel =  companyModel.Where(s => s.CorrespondingAddress.Any(x => x.RegionID.Equals(1198)));

別の巣を作ることはできませんAnyか?

companyModel = db.Company.Where(s => s.CorrespondingAddress.Any(x => x.Region.Any(r => r.RegionDetails.Any(rd => rd.Parent == 1 && rd.Child == 1198)));

編集

次のプロパティが与えられますCorrespondingAddress

public virtual Region Region { get; set; } 

そしてRegion、プロパティRegionDetailsがあると仮定します(Region-> RegionDetailsを1対1にします):

public virtual RegionDetails RegionDetails{ get; set; } 

以下が機能するはずです。

companyModel = db.Company.Where(s => s.CorrespondingAddress.Any(x => x.Region.RegionDetails.RegionParent == 1 && x.Region.RegionDetails.RegionChild == 1198)));
于 2012-09-10T13:04:33.243 に答える
0

詳細テーブル(多対多の関係テーブル)のモデルがないため、次の方法を使用して解決しました。

companyModel = companyModel.Where(s => s.CorrespondingAddress.Any(x => x.Region.RegionParent.Any(d => d.RegionID == region)));
于 2012-09-11T08:40:48.273 に答える