LINQ select 语句后的强类型新对象

Art*_*rtK 1 c# linq

这对我来说不是一个重要的概念,但我只是想知道我是否可以在linq select语句之后对新对象进行强类型,而不是在C#. 这是一个示例,当然已经不复存在了,但它讲述了这个概念:

public class DisplayAddress { public int AddressId; public string ShortAddress; }

List<DisplayAddress> shortAddresses = 
  (from la in longAddresses
    join ca in customerAddresses
      on la.AddressId equals ca.AddressId
    where ca.CustomerId == selectedCustomer
  select new { new DisplayAddress() {AddressId = la.AddressId, ShortAddress = la.Line1 + " " + la.City + " " + la.State}}).Tolist<DisplayAddress>();
Run Code Online (Sandbox Code Playgroud)

das*_*ght 5

当然,您可以使用 中的任何表达式Select,包括创建您定义的类型的新对象的表达式。您需要做的就是删除外部new:

select new DisplayAddress {
    AddressId = la.AddressId
,   ShortAddress = la.Line1 + " " + la.City + " " + la.State
}).Tolist();
Run Code Online (Sandbox Code Playgroud)

请注意,匿名类型也是强类型的。换句话说,如果你这样做

select new {
    AddressId = la.AddressId
,   ShortAddress = la.Line1 + " " + la.City + " " + la.State
}).Tolist();
Run Code Online (Sandbox Code Playgroud)

您的匿名类型将有两个强类型字段,称为AddressId和ShortAddress。唯一的区别是您需要在创建匿名对象的上下文中使用匿名对象以保留强类型。换句话说,你就不能匿名的结果传递Select到非通用功能,而无需使用dynamic,object等等。