2011-09-26 123 views
6

的LINQ代码返回一个匿名类型我怎么能返回一个强类型的“客户”的? 我正在返回一个匿名类型,因为我只想从实体中选择某些字段。EF4我如何转换匿名类型的强类型的LINQ

var customer = from c in _entities.Customers 
          join con 
          in _entities.Contracts on c.CustomerID equals con.customerID 
          where con.contractNo == number 
          select new 
          { 
           Surname = c.Surname, 
           Forename= c.Forename, 
           Address = c.Address, 
           Suburb = c.Suburb, 
           State = c.State, 
           Postcode = c.PostCode, 
           PhoneNo = c.PhoneNo 
         }; 

感谢

+1

你确实应该尝试接受一些你的答案,还是让人西港岛线我不愿意在将来帮助你。 – eandersson

+0

@富士谢谢你的信息。 –

回答

6

要么做

var customer = from c in _entities.Customers 
         join con 
         in _entities.Contracts on c.CustomerID equals con.customerID 
         where con.contractNo == number 
         select c; 

选择客户的情况下,以原样或

Customer customer = (from c in _entities.Customers 
         join con 
         in _entities.Contracts on c.CustomerID equals con.customerID 
         where con.contractNo == number 
         select new Customer{ 
          Surname = c.Surname, 
          Forename= c.Forename, 
          Address = c.Address, 
          Suburb = c.Suburb, 
          State = c.State, 
          Postcode = c.PostCode, 
          PhoneNo = c.PhoneNo 
         }).FirstOrDefault(); 

创建具有只是你的属性客户的新实例有兴趣填写。 (提供的客户类有一个参数的构造函数)

+0

我使用了第二个LINQ查询,但是如何将var客户投射到客户?我只想返回一行。 –

+0

@marks根据需要使用'.SingleOrDefault()'或'.FirstOrDefault()'。 –

+0

我在“选择”新客户时收到错误消息。 “不能IQueryable的隐式转换类型System.Linq的。到Portal.Model.Customer。 的显式转换exisits(是否缺少强制)由于我创建一个新的客户,我需要强制转换? –

2

看起来你正在寻找有一个contractNo匹配number任何合同的所有客户 - 不使用连接,而是使用EF导航属性:

var customers = _entities.Customers 
         .Where(c => c.Contracts.Any(x => x.contractNo == number)); 

如果只是单一(或可能没有),这些客户使用SingleOrDefault()只检索单个Customer实体:

Customer customer = _entities.Customers 
          .Where(c => c.Contracts.Any(x => x.contractNo == number)) 
          .SingleOrDefault(); 
+0

我会研究EF导航属性\t 如何将var客户投放到客户? –

+1

@ user730381:这**是**客户 - 在第二个示例中,您可以使用'var customer = ...'和'Customer customer = ...'交替使用 – BrokenGlass