可以IEnumerable

时间:2014-10-25 17:43:49

标签: asp.net-mvc entity-framework

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

1 个答案:

答案 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_OrderItem中的所有属性,这意味着您需要另一个类。你可以在不创建另一个类的情况下离开,但从长远来看它更简单。所以首先让你的课,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