0

我对此感到困惑,我知道会有一种更巧妙的方式来启动它。“结果”变量有很多记录,我想检查 IN_SiteId 是否 > 0 并对其进行过滤,之后对 LandownerId 和 PaymentCategoryId 等进行过滤。如果我能为前 2 个找到正确的方法,我会从那里确定。这应该更容易,但有一个砖墙的一天。任何意见表示赞赏

public IQueryable rptRentPaidMonthly(int IN_SiteId, int IN_LandownerId, int IN_PaymentCategoryId, int IN_PaymentTypeId, string IN_ShowRelevantProportion)
{

    var result = this._lmsDb.rptRentPaidMonthly(IN_daysFrom, IN_daysTo, IN_SiteId, IN_LandownerId, IN_PaymentCategoryId, IN_PaymentTypeId, IN_ShowRelevantProportion);

    if (IN_SiteId > 0)
    {
        var searchResults = (from s in result
                             where (s.SiteId == @IN_SiteId)
                             select s);

        return searchResults.AsQueryable();
    }

    return result.AsQueryable();
}
4

1 回答 1

0

我不是 LINQ 专家,但我认为您可以执行以下操作:

public IQueryable rptRentPaidMonthly(int IN_SiteId, int IN_LandownerId, int IN_PaymentCategoryId, int IN_PaymentTypeId, string IN_ShowRelevantProportion)
{
    var result = this._lmsDb.rptRentPaidMonthly(IN_daysFrom, IN_daysTo, IN_SiteId, IN_LandownerId, IN_PaymentCategoryId, IN_PaymentTypeId, IN_ShowRelevantProportion);


    var searchResults = (from s in result
                         where (IN_SiteId <= 0 || s.SiteId == IN_SiteId)
                                && (IN_LandownerId <= 0 || s.LandownerId == IN_LandownerId)
                                && (IN_PaymentCategoryId <= 0 || s.PaymentCategoryId == IN_PaymentCategoryId)
                                && (IN_PaymentTypeId <= 0 || s.PaymentTypeId == In_PaymentTypeId)
                         select s);

    return searchResults.AsQueryable();
}

where子句检查每个过滤器值是否小于或等于 0,如果是,则它将返回 true,并且不会评估下一位尝试过滤所提供值的实际字段的位。

于 2013-05-18T09:03:25.447 回答