获取/设置实体中的连接查询问题

时间:2016-12-07 13:23:04

标签: c# entity-framework

我想在public IList<Order> OrderList { get; set; }中使用join 2表填充数据。因为我已经在下面的dbEntities中编写了代码

using (var db = new dbEntities())
{
     OrderList  = (from row in db.Orders
                 join rowjoin in db.Users on row.UserId equals rowjoin.Id
                 orderby row.OrderNumber
                 select new { row.Id, row.UserId, row.TechnicianId, row.OrderNumber, row.ModelName,
                 row.ServiceName,row.IconUrl,row.Cost,row.Position, row.Status, rowjoin.FirstName ,
                 rowjoin.LastName, rowjoin.MobileNumber, rowjoin.Email,rowjoin.City, rowjoin.Address}).ToList();
}

它给出错误2:

  

无法将System.Collections.Generic.List<AnonymousType#1>类型隐式转换为System.Collections.Generic.IList<Mobileappy.Order>。存在显式转换(您是否错过了演员?)

我该如何解决?

3 个答案:

答案 0 :(得分:3)

您的查询不返回Order对象,而是返回匿名类型。 如果您想获得List<Order>,则必须select row而不是select new {...}

答案 1 :(得分:1)

您需要使用Order和User的信息声明一个新的Type(OrderUser)。然后,您必须使用select new {...}而不是select new OrderUser(){ UserName = rowjoin.FirstName, OrderId = row.Id, ... }。按public IList<Order> OrderList { get; set; }

更改public IList<OrderUser> OrderList { get; set; }

答案 2 :(得分:1)

您的OrderList属性需要是一个可以包含User和Order(如ViewModel)组合的新类型。您可以通过两种方式为新创建的类型创建属性 1.为新创建的视图模型创建所有必需属性(用户属性+订单属性),并通过linq查询分配值。

public class OrderUserVM
{
    public int OrderNumber { get; set; }
    ...
    public string FirstName { get; set; }
    ...
}
 public IList<OrderUserVM> OrderList { get; set; }
 OrderList = (from row in db.Orders
                         join rowjoin in db.Users on row.UserId equals rowjoin.Id
                         orderby row.OrderNumber
                         select new OrderUserVM
                         {
                             OrderNumber = row.OrderNumber,
                             ...
                             FirstName = rowjoin.FirstName,
                             ....
                         }).ToList();

OR
2.仅创建两个类型为&#39; User&#39;和&#39;订购&#39;对于新创建的视图模型,并通过linq查询分配值。

public class OrderUserVM
{
    public User User { get; set; }
    public Order Order { get; set; }
}
public IList<OrderUserVM> OrderList { get; set; }
OrderList = (from row in db.Orders
                         join rowjoin in db.Users on row.UserId equals rowjoin.Id
                         orderby row.OrderNumber
                         select new OrderUserVM
                         {
                             Order = row,
                             User = rowjoin,

                         }).ToList();