仮定しましょう:
- 私はEVENTテーブルを持っています
- CLIENT テーブルがあります
- ADDRESS テーブルには、UnitNo、StreetNo、StreetName、City、AddressType などの列があります。
- CLIENT には多数の EVENT があり、CLIENT には多数の ADDRESS も含まれます。
したがって、クライアントの HOME アドレスの通りの名前でイベントのリストを照会したい場合は、次のようにします。
var qry = db.Events
.Select(evt => new {
EventAddress =
evt.Client
.Addresses
.FirstOrDefault(a => a.AddressType.Equals("HOME")).StreetName
});
ただし、完全な住所を取得したい場合は、一連の住所フィールドを連結する必要があります。現時点では、次のようなことを試みています
var qry = db.Events
.Select(evt => new {
EventAddress =
evt.Client
.Addresses
.FirstOrDefault(a => a.AddressType.Equals("HOME")).StreetNo + " " +
evt.Client
.Addresses
.FirstOrDefault(a => a.AddressType.Equals("HOME")).StreetName + " " +
evt.Client
.Addresses
.FirstOrDefault(a => a.AddressType.Equals("HOME")).City
});
それは機能せず、醜くも見えます「再利用可能」
にするためのより良い方法はありますか?
evt.Client.Addresses.FirstOrDefault(a => a.AddressType.Equals("HOME"))
var qry =
db.Events
.Select(evt => new {
EventAddress =
STUFF.StreetNo + " " + STUFF.StreetName + " " + STUFF.City
});
よろしくお願いします!
ヒュー
アップデート:
答えてくれたIlianに感謝します。うまくいきます。それに基づいて、回答の拡張バージョンを作成しました
var qry =
db.Events
.Select(evt => new {
EventAddress =
db.Addresses.Select(a => new
{
ClientId = a.ClientId,
AddressType = a.AddressType,
FullAddress = (a.addStreetNo ?? "") + (a.addStreetName ?? "")
})
.FirstOrDefault(a => a.ClientId == e.Client.ClientId && a.AddressType.Equals("HOME"))
.FullAddress
});