1

只是想知道是否有办法从 LINQ to SQL 投影类型中提取一些重复。

例子:

表:地址

字段: AddressID、HouseNumber、Street、City、State、Zip 等 +20 个

MyAddress 类: AddressID、HouseNumber、Street(只有 3 个字段)

林克:

从 db.Addresses 中的
选择新的我的地址
{
  AddressID = a.AddressID,
  HouseNumber = a.HouseNumber,
  街道 = a.Street
}

上面的查询完美运行,我理解为什么这样的事情会返回每行中的所有 20 多个字段:

从 db.Addresses 中的
选择新的我的地址(a);

我的地址类
{
  公共我的地址(地址 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 回答