我想在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>
。存在显式转换(您是否错过了演员?)
我该如何解决?
答案 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();