映射动态Linq表达式

时间:2015-11-13 17:56:10

标签: c# linq

public static IQueryable<T> FilterExact<T>(this IQueryable<T> details, int c, Func<T, int> lambda)
{
    if (c > 0)
    {
        details = details.Where(s => lambda(s).Equals(c));
    }
    return details;
}

以上就是我到目前为止所做的。由于linq到实体错误而存在当前错误,可以通过将其切换到IEnumerable来修复,但相反,我想要的是能够创建新的linq表达式,而不是直接执行函数。

我该怎么做呢?我希望从Func<T, int>映射到Expression<Func<T, bool>>

我需要这个的原因是因为有一些地方存在如下代码,除了相同的代码被复制粘贴多次与不同的实体列相关联。我想将其创建为防止代码重复的方法,但需要一种方法来指定要使用的列。 (我首先尝试过反射,但它显着降低了一切。)

if (!string.IsNullOrEmpty(searchCriteria.StudyDate))
{
    if (searchCriteria.StudyDate.Contains(":"))
    {
        string[] dates = searchCriteria.StudyDate.Split(':');
        DateTime startDate;
        DateTime endDate;
        DateTime.TryParse(dates[0], out startDate);
        DateTime.TryParse(dates[1], out endDate);
        if (startDate.Year > 1 && endDate.Year > 1 && endDate > startDate)
        {
            dropChargesStudies = dropChargesStudies.Where(s => s.PERFORMED >= startDate && s.PERFORMED <= endDate);
        }
        else
        {
            throw new Exception("The study date is invalid.");
        }
    }
    else
    {
        DateTime studyDateParsed;
        DateTime.TryParse(searchCriteria.StudyDate, out studyDateParsed);
        if (studyDateParsed.Year > 1)
        {
            dropChargesStudies = dropChargesStudies.Where(s => s.PERFORMED.Value == studyDateParsed);
        }
        else
        {
            throw new Exception("The study date is invalid.");
        }
    }
}

0 个答案:

没有答案