1

LINQ to SQL の投影型から繰り返しの一部を取り出す方法があるかどうか疑問に思っています。

例:

表:アドレス

フィールド: AddressID、HouseNumber、Street、City、State、Zip、その他 20 個

Class MyAddress: AddressID、HouseNumber、Street (3 フィールドのみ)

リンク:

db.Addresses の a から
新しい MyAddress を選択
{
  AddressID = a.AddressID、
  HouseNumber = a.HouseNumber、
  Street = a.Street
}

上記のクエリは完全に機能し、このようなものが各行に 20 以上のフィールドすべてを返す理由を理解しています。

db.Addresses の a から
新しい MyAddress(a) を選択します。

クラス MyAddress
{
  public MyAddress(アドレスa)
  {
    this.AddressID = a.AddressID、
    this.HouseNumber = a.HouseNumber、
    this.Street = a.Street
  }
}

それは私の質問に私を導きます:

ある種のヘルパー関数または拡張メソッドを実装して、LINQ モデルから MyAddress に「マップ」し、すべてのフィールドではなく、クエリ結果で必要なフィールドのみを返すことは可能ですか?

4

1 に答える 1

2
from a in db.Addresses
select new MyAddress
{
  AddressID = a.AddressID,
  HouseNumber = a.HouseNumber,
  Street = a.Street
}

そのクエリは、結果のSQLで要求されたフィールドのみを選択します。

タイプを再利用する関数は次のようになります。

public IQueryable<MyAddress> ProjectAddress(IQueryable<Address> addresses)
{
    return from a in addresses
           select new MyAddress
           {
               AddressID = a.AddressID,
               HouseNumber = a.HouseNumber,
               Street = a.Street
           };
}

これは次のように使用できます。

return ProjectAddress(db.Addresses);

関数は次のようになると思います。

public static Expression<Func<Address, MyAddress>> ToMyAddress()
{
    return a => new MyAddress { AddressID = a.AddressID, 
                                HouseNumber = a.HouseNumber,
                                Street = a.Street
                              };
}
于 2010-04-12T13:26:28.727 に答える