IQueryable extension method for linq2entities

前端 未结 3 1629
遥遥无期
遥遥无期 2020-12-09 07:17

I am trying to implement an extension method that will work with linq2entities. I had initially assumed that if my extension method took and returned an IQueryable, and as

3条回答
  •  悲哀的现实
    2020-12-09 07:55

    Instead of using expressions e.g.

    Expression> IsCurrent = (p)
        => p.Ends > DateTime.Now && p.Starts <= DateTime.Now;
    
    var query = db.PersonHistories.Where(IsCurrent);
    

    You can define extension methods such as:

    public static IsCurrent Func<
        IQueryable, DateTime, IQueryable
        >()
    {
        return (IQueryable query, DateTime referenceDate) =>
            query.Where(p.Ends > referenceDate && p.Starts <= referenceDate);
    }
    

    The use it like this:

    var query = IsCurrent();
    
    var results = query(context.PeoplesHistory, referenceDate);
    

    Or:

    var results = query(previousResults, referenceDate);
    

    Or alternatively:

    public static IsCurrent Func, IQueryable>(
        DateTime referenceDate)
    {
        return (IQueryable query) =>
            query.Where(p.Ends > referenceDate && p.Starts <= referenceDate);
    }
    
    var query = IsCurrent(refernceDate);
    
    var results = query(context.PeoplesHistory);
    

    That way you don't need a framework for building expressions.

提交回复
热议问题