2

仮定しましょう:

  • 私は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
});
4

1 に答える 1

0

次のクエリ構文を使用します。

var qry =
    from evt in db.Events
    let firstAddress = evt.Client.Addresses.FirstOrDefault(a => a.AddressType.Equals("HOME"))
    where firstAddress != null
    select new
    {
        EventAddress = firstAddress.StreetNo + " " +
                       firstAddress.StreetName + " " +
                       firstAddress.City
    }
于 2012-06-08T01:49:50.333 に答える