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 に答える