代码之家  ›  专栏  ›  技术社区  ›  Hamid Talebi

如何将存储过程设置为IQueryable?

  •  0
  • Hamid Talebi  · 技术社区  · 10 年前

    我想从实体获取存储过程,以防我可以这样使用:

    var WagonQuery = db.spGetTravelBYRTravelInfo(DepartureDate, FromId, ToId);
    
    if (WagonId != 0)
        WagonQuery = WagonQuery.Where(p => p.WagonID == WagonId); // HERE IS ERROR. Wagonquery Can Not Uses Like forexample List,So I Can Filter It And Use Several Where Clauses
    
    grdTravels.DataSource = WagonQuery;
    grdTravels.DataBind();
    

    以下是错误:

    无法隐式转换类型“System.Collections.Generic”。IEnumerable“到”System.Data.Objects.ObjectResult“。存在显式转换(是否缺少强制转换?)

    2 回复  |  直到 10 年前
        1
  •  0
  •   Syed Mhamudul Hasan    10 年前

    我不知道您的存储过程返回了什么。在我使用EF6.1.3的项目中,通过执行以下操作,可以从数据库中动态筛选列表

     List<SparePart> spSpares = db.Database.SqlQuery<SparePart>("spGetSparePartsFromProductId " + Convert.ToString(productId) + "," + Convert.ToString(subProduct));
    

    我的模型在哪里

     public partial class SparePart
        {
            public long ItemID { get; set; }
            public string ItemCode { get; set; }
            public string ItemName { get; set; }
            public Nullable<decimal> ItemPrice { get; set; }
            public bool IsActive { get; set; }
            public string ItemDesc { get; set; }
            public Nullable<int> ItemGroup { get; set; }
            public string Model { get; set; }
            public string MajorCategory { get; set; }
            public string MinorCategory { get; set; }
            public string UOM { get; set; }
        }
    

    和存储过程

    CREATE PROC [dbo].[spGetSparePartsFromProductId]
    (
    @productId bigint,
    @subproductId bigint=0
    )
    AS
    BEGIN
    if @productId=1 
    select * from SpareParts
    END 
    GO
    

    其结果与SpareParts表相同

    Same as Model

    可能会有所帮助

        2
  •  0
  •   Hamid Talebi    10 年前

    我应该将其转换为列表,然后(就像这样):

            List<spGetTravelBYRTravelInfo_Result> lst = db.spGetTravelBYRTravelInfo(DepartureDate, FromId, ToId).ToList();
        var dt = lst.Select(p => p);
        if (WagonId != 0)
            dt = dt.Where(p => p.WagonID == WagonId);
        if (ddlReserved.SelectedValue == "t")
            dt = dt.Where(p => p.Presell > 0);