0

int? ステータス パラメータが null ではなく、有効です。列挙型フィルターが尊重されない理由を知っている人はいますか? 読んでくれてありがとう!

public ActionResult GetArrivals(int facilityId, int? status)
{
    var registrationList = db.Registrations
            .Where(f => f.Facility.Id == facilityId)
            .Where(a => a.ArrivalDateTime >= DateTime.Today)
            .OrderBy(ln => ln.User.LastName)
            .OrderBy(fn => fn.User.FirstName);


    if (status.HasValue)
    {
        UrgentCareWaitWeb.Models.RegistrationStatus statusValue;

        if (Enum.TryParse(status.Value.ToString(), out statusValue) == true)
        {
            registrationList
                .Where(s => s.Status == statusValue);
        } 
    }



    // Project query to view
    var pview = registrationList.Select(r => new PatientRegistrationsView()
            {
                ArrivalId = r.Id,
                UserId = r.User.UserId,
                UserName = r.User.UserName,
                FirstName = r.User.FirstName,
                LastName = r.User.LastName,
                PrimaryPhone = r.User.PrimaryPhone,
                SecondaryPhone = r.User.SecondaryPhone,
                ArrivalDateTime = r.ArrivalDateTime,
                PatientDataformId = r.PatientDataformId,
                RegistrationStatus = r.Status,

            });



    //if (Request.IsAjaxRequest())
    //  return PartialView("_PatientRegistrations", model);


    return View(pview);
}
4

3 に答える 3

5

メソッドの結果をWhere元のオブジェクトに戻す必要がありますIEnumerable。インプレース変更を行う代わりに、新しいオブジェクトを返します。

registrationList = registrationList.Where(s => s.Status == statusValue);

更新に応じて: order 句の場所を交換する必要があります。試す:

var registrationList = db.Registrations
        .Where(f => f.Facility.Id == facilityId)
        .Where(a => a.ArrivalDateTime >= DateTime.Today);

if (status.HasValue)
{
    UrgentCareWaitWeb.Models.RegistrationStatus statusValue;

    if (Enum.TryParse(status.Value.ToString(), out statusValue) == true)
    {
        registrationList = registrationList
            .Where(s => s.Status == statusValue);
    } 
}

 var pview = registrationList
            .OrderBy(ln => ln.User.LastName)
            .ThenBy(fn => fn.User.FirstName)
            .Select(r => new PatientRegistrationsView()
        {
            ArrivalId = r.Id,
            UserId = r.User.UserId,
            UserName = r.User.UserName,
            FirstName = r.User.FirstName,
            LastName = r.User.LastName,
            PrimaryPhone = r.User.PrimaryPhone,
            SecondaryPhone = r.User.SecondaryPhone,
            ArrivalDateTime = r.ArrivalDateTime,
            PatientDataformId = r.PatientDataformId,
            RegistrationStatus = r.Status,

        });

ThenBy-の追加の使用に注意してLastName ください FirstName。元のLastName順序は でしたが、その順序を で置き換えFirstNameます。

于 2013-03-08T22:15:46.087 に答える
0

すべてのLINQクエリはIEnumerable<T>オブジェクトを返しますが、元のシーケンスは変更されません。

これを行う:

registrationList = registrationList.Where(s => s.Status == statusValue);
于 2013-03-08T22:20:53.520 に答える
0

これは、ラムダ式内の変数のクロージャーにも関連している可能性があると思います...

_internalfacilityIDのような内部変数を使用し、最初に入力パラメーター値をそれに割り当てます。

他の方法で解決した場合でも、これが問題の解決に役立つかどうかを確認してください。

public ActionResult GetArrivals(int facilityId, int? status)
{
    int _internalfacilityID = facilityId;
    var registrationList = db.Registrations
        .Where(f => f.Facility.Id == **_internalfacilityID**)
        .Where(a => a.ArrivalDateTime >= DateTime.Today)
        .OrderBy(ln => ln.User.LastName)
        .OrderBy(fn => fn.User.FirstName);
于 2013-03-10T20:03:37.453 に答える