public IEnumerable<Temp_Order> Get_Temp(string id)
{
//List<Temp_Order> data = new List<Temp_Order>();
IEnumerable<Temp_Order> data = db.Temp_Order
.Join(db.Items,
t_id => t_id.ItemId,
I_id => I_id.ItemId,
(t_id, I_id) => new { t_id.Quantity, I_id.ItemName })
.Where(x => x.ItemName == id);
return data;
}
在这种方法中我想要IEnumerable<Temp_Order>
。所以我将在控制器中使用它并返回视图。
我收到了这个错误:
无法将类型'System.Linq.IQueryable'隐式转换为'System.Collections.Generic.IEnumerable'。存在显式转换(您是否缺少演员?)E:\ WORK \ Projects \ RMS_Live \ RMS_Live \ Models \ Order.cs
答案 0 :(得分:1)
Join正在将您的查询转换为匿名类型的IEnumerable。在演员表的最后添加Select将返回Temp_Order
:
public IEnumerable<Temp_Order> Get_Temp(string id)
{
//List<Temp_Order> data = new List<Temp_Order>();
IEnumerable<Temp_Order> data = db.Temp_Order
.Join(db.Items, t_id => t_id.ItemId, I_id => I_id.ItemId, (t_id, I_id) => new { t_id.Quantity, I_id.ItemName })
.Where(x => x.ItemName == id)
.Select(a => new Temp_Order
{
ItemName = a.ItemName,
Property2 = a.Property2,
//snip
});
return data;
}
修改强>
您在评论中指出您希望Temp_Order
和Item
中的所有属性,这意味着您需要另一个类。你可以在不创建另一个类的情况下离开,但从长远来看它更简单。所以首先让你的课,2种方式浮出水面,你要么复制你需要的所有属性,要么只返回2个对象,我将使用后者:
public class OrderItem
{
public Temp_Order Temp_Order { get; set; }
public Item Item { get; set; }
}
现在你的功能变成了这个:
public IEnumerable<OrderItem> Get_Temp(string id)
{
IEnumerable<OrderItem> data = db.Temp_Order
.Join(db.Items,
t_id => t_id.ItemId,
I_id => I_id.ItemId,
(t_id, I_id) => new OrderItem
{
Temp_Order = t_id,
Item = I_id
})
.Where(x => x.ItemName == id);
return data;
}
在您看来,请确保将模型类型设置为IEnumerable<OrderItem>
,然后您可以访问所有类似的属性:
@Model.Temp_Order.ItemName