如何将存储过程获取为 IQueryable?

How to get stored procedure as IQueryable?

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

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();

这里是错误:

Cannot implicitly convert type 'System.Collections.Generic.IEnumerable' to 'System.Data.Objects.ObjectResult'. An explicit conversion exists (are you missing a cast?)

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

        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);

我搞不懂你的存储过程是什么returns。在我使用 EF 6.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 相同 table

可能会有一些帮助