iT邦幫忙

0

想請問這個該如何處理

是這樣的,今天我想做一個功能畫面如圖

https://ithelp.ithome.com.tw/upload/images/20181222/201101329C7lyeyZMs.jpg

根據左邊的通知時間來判定狀態是已排床還是未排床
這是我這功能的table,名字叫HD_REQUIRE
https://ithelp.ithome.com.tw/upload/images/20181222/20110132npPLHoOobc.jpg
這是我需要查詢狀態的table,名字叫PAT_SCHEDULE
https://ithelp.ithome.com.tw/upload/images/20181222/20110132pH6ZLGnaEw.jpg

目前我能夠找到小於我通知時間的所有資料
這是我的sql

select b.pat_guid,a.notice_datetime,b.dia_date
from hd_require a
join pat_schedule b
on a.PAT_GUID  = b.PAT_GUID
WHERE a.notice_datetime>b.dia_date

linq

  public List<HDRequireDto> FindRequire( string cid, DateTime StartDate, DateTime EndDate)
        {
            

            EndDate = new DateTime(EndDate.Year, EndDate.Month, EndDate.Day, 0, 0, 0).AddDays(1);

       var query = (from x in _repo.HD_REQUIRE
                         from y in _repo.PAT_SCHEDULE where y.PAT_GUID == x.PAT_GUID && x.NOTICE_DATETIME >y.DIA_DATE
                         where (x.CID == cid && x.NOTICE_DATETIME >= StartDate && x.NOTICE_DATETIME < EndDate)
                         select new HDRequireDto
                         {         
                         GUID =x.GUID,
                         CID =x.CID,
                         NOTICE_DATETIME =x.NOTICE_DATETIME ,
                         NOTICE_EMP_ID=x.NOTICE_EMP_ID,
                         PAT_GUID=x.PAT_GUID,
                         PAT_SOURCE=x.PAT_SOURCE,
                         IPD_BED_NO =x.IPD_BED_NO,
                         HD_METHOD=x.HD_METHOD,
                         FREQ=x.FREQ,
                         MEMO=x.MEMO,
                         CRE_DATE=x.CRE_DATE,
                         STATUS=x.STATUS,
                         CRE_UID=x.CRE_UID,
                         MOD_DATE = x.MOD_DATE,
                         MOD_UID=x.MOD_UID                        
                         }).OrderByDescending(x=>x.NOTICE_DATETIME).ToList<HDRequireDto>();

            //方式
            List<NCODE> codList = _repo.NCODE.Where(x => x.CID == cid && x.NC_ID == NcId.MethodList).ToList<NCODE>();
            //頻率
            List<NCODE> codList2 = _repo.NCODE.Where(x => x.CID == cid && x.NC_ID == NcId.FreqList).ToList<NCODE>();

            foreach (HDRequireDto dto in query)
            {
                //護士名字
                dto.Name = _repo.EMPLOYEE.Where(x => x.CID == dto.CID && x.EMP_ID == dto.NOTICE_EMP_ID).FirstOrDefault<EMPLOYEE>().EMP_NAME;
                //來源
                dto.Source = _repo.NCODE.Where(x => x.CID == dto.CID && x.NC_ID == NcId.PatSourceList && x.NC_CODE == dto.PAT_SOURCE).FirstOrDefault<NCODE>().NC_NAME;
                //病患名字
                dto.PatName = _repo.PATIENT.Where(x => x.CID == dto.CID && x.GUID == dto.PAT_GUID).FirstOrDefault<PATIENT>().PAT_NAME;

             
                var lastitem = query.Last();
                foreach (var item in query)
                {
                    if (item == lastitem)
                    {
                        return query;
                    }
                }                        
            }
        return query;    
          
        }

前端
https://ithelp.ithome.com.tw/upload/images/20181222/20110132slr5dpUMEC.jpg
最終執行結果是這樣

https://ithelp.ithome.com.tw/upload/images/20181224/20110132arK5K3bq82.jpg

已經算是我要的結果了,只是下面空白的部分我該如何取消掉?

fillano iT邦超人 1 級 ‧ 2018-12-22 15:26:25 檢舉
為什麼是一筆?你明確知道一筆的條件是什麼,結果就會是一筆。這跟技術沒直接關係。
優悠 iT邦新手 4 級 ‧ 2018-12-25 11:02:28 檢舉
先除BUG模式,看這些資料的是不是一樣PK(主鍵),若是一樣可以用Distinct()去除重複,當然最好是直接修為何找到重複,另外這段
select new HDRequireDto
{
GUID =x.GUID,
CID =x.CID,
NOTICE_DATETIME =x.NOTICE_DATETIME ,
NOTICE_EMP_ID=x.NOTICE_EMP_ID,
PAT_GUID=x.PAT_GUID,
PAT_SOURCE=x.PAT_SOURCE,
IPD_BED_NO =x.IPD_BED_NO,
HD_METHOD=x.HD_METHOD,
FREQ=x.FREQ,
MEMO=x.MEMO,
CRE_DATE=x.CRE_DATE,
STATUS=x.STATUS,
CRE_UID=x.CRE_UID,
MOD_DATE = x.MOD_DATE,
MOD_UID=x.MOD_UID
}
直接
select x
就好

1 個回答

0
rogeryao
iT邦研究生 1 級 ‧ 2018-12-22 17:02:52
最佳解答

1.通知時間:HD_REQUIRE.NOTICE_DATETIME
2.通知者 :HD_REQUIRE.NOTICE_EPM_ID
3.病患姓名:HD_REQUIRE.PAT_GUID
4.病患來源:HD_REQUIRE.PAT_SOURCE 或 PAT_SCHEDULE.PAT_SOURCE
5.病床號碼:HD_REQUIRE.IPD_BED_NO
6.狀 態:HD_REQUIRE.STATUS 或 PAT_SCHEDULE.STATUS
7.若第 4 點 = HD_REQUIRE.PAT_SOURCE 且第 6 點 = HD_REQUIRE.STATUS,
若要 JOIN PAT_SCHEDULE 且 a.notice_datetime>b.dia_date ,
那就 SELECT DISTINCT
8.若第 4 點 = PAT_SCHEDULE.PAT_SOURCE 或第 6 點 = PAT_SCHEDULE.STATUS ,那就可能會出現多筆
9.若是第 8 點而且相同通知時間只要留第一筆,其他相同的空白,那就只能在加工處理了
10.若 HD_REQUIRE.PAT_SOURCE = PAT_SCHEDULE.PAT_SOURCE 或HD_REQUIRE.STATUS = PAT_SCHEDULE.STATUS ,那就要加入條件式內

tenno081 iT邦新手 4 級 ‧ 2018-12-24 09:24:22 檢舉

你好,感謝您為我解說其實我只要看GUID就好,

我的HD_REQUIRE裡的HD_REQUIRE.PAT_GUID的值就是

PAT_SCHEDULE裡的PAT_GUID,可能比較符合第7點也就是我

SQL指令碼那樣

我要發表回答

立即登入回答