iT邦幫忙

0

LINQ查詢請問

     public List<HD_RECORD_BEFORE> checkbedno(string devicebarcode01, string devicebarcode02)
        {
       
            var query = (from x in _repo.HD_RECORD_BEFORE
                         join y in _repo.HD_DEVICED_HISTORY_LIST
                         on devicebarcode01 equals y.DEV_BARCODE 
                         where y.END_RECORD_DATETIME == null &&
                         x.PAT_SCHEDULE_GUID == y.PAT_SCHEDULE_GUID &&
                         DbFunctions.TruncateTime(x.DIA_DATE) == DbFunctions.TruncateTime(y.START_RECORD_DATETIME)
                         select x
                              ).ToList<HD_RECORD_BEFORE>();              
            return query;

        }

這是我的一段LINQ查詢,目前我想多做一個判斷

就是參數devicebarcode01 不為空值或null做A查詢,

devicebarcode02不為空值或null做B查詢,

想請問這個有辦法實現嗎?我目前暫時寫不出,希望能給個參考

謝謝。

看更多先前的討論...收起先前的討論...
石頭 iT邦研究生 3 級 ‧ 2019-05-20 18:19:11 檢舉
可否提供A查詢和B查詢的程式碼?
tenno081 iT邦新手 4 級 ‧ 2019-05-21 08:52:54 檢舉
其實A查詢B查詢都一樣,B查詢只是換成devicebarcode02 equals y.DEV_BARCODE

這樣
優悠 iT邦新手 4 級 ‧ 2019-05-21 09:51:13 檢舉
就是參數devicebarcode01 不為空值或null做A查詢,
devicebarcode02不為空值或null做B查詢,
用IF不就OK了?
tenno081 iT邦新手 4 級 ‧ 2019-05-21 10:02:47 檢舉
後來有遇到一些問題,在下面留言有,後來用dog大的方式處理好

2 個回答

1
石頭
iT邦研究生 3 級 ‧ 2019-05-20 18:17:48
最佳解答

看過你的回覆 你應該可以改成這樣
利用三元運算子來取得這次要使用的條件

public List<HD_RECORD_BEFORE> checkbedno(string devicebarcode01, string devicebarcode02)
{
	string queryCondition = !string.IsNullOrEmpty(devicebarcode01) ? 
									devicebarcode01 : devicebarcode02;
	
	var query = (from x in _repo.HD_RECORD_BEFORE
				 join y in _repo.HD_DEVICED_HISTORY_LIST
				 on queryCondition equals y.DEV_BARCODE 
				 where y.END_RECORD_DATETIME == null &&
				 x.PAT_SCHEDULE_GUID == y.PAT_SCHEDULE_GUID &&
				 DbFunctions.TruncateTime(x.DIA_DATE) == DbFunctions.TruncateTime(y.START_RECORD_DATETIME)
				 select x
					  ).ToList<HD_RECORD_BEFORE>();              
	return query;

}
看更多先前的回應...收起先前的回應...
小魚 iT邦大師 1 級 ‧ 2019-05-20 19:36:30 檢舉

我也是這樣想...

tenno081 iT邦新手 4 級 ‧ 2019-05-21 08:45:17 檢舉

我原先是這樣想的

        if (!string.IsNullOrEmpty(devicebarcode01))
            {
                
                var query = (from x in _repo.HD_RECORD_BEFORE
                             join y in _repo.HD_DEVICED_HISTORY_LIST
                             on devicebarcode01 equals y.DEV_BARCODE
                             where y.END_RECORD_DATETIME == null &&
                             x.PAT_SCHEDULE_GUID == y.PAT_SCHEDULE_GUID &&
                             DbFunctions.TruncateTime(x.DIA_DATE) == DbFunctions.TruncateTime(y.START_RECORD_DATETIME)
                             select x
                             ).ToList<HD_RECORD_BEFORE>();
            } 
            return query;

不過這樣是錯誤的

石頭 iT邦研究生 3 級 ‧ 2019-05-21 09:23:08 檢舉

你所謂的錯誤點在哪裡? 另外我對於你提供的資訊更新了答案

tenno081 iT邦新手 4 級 ‧ 2019-05-21 09:34:17 檢舉

大概是這樣的問題吧!

我等等試試

https://ithelp.ithome.com.tw/upload/images/20190521/20110132HhpSy9GRfe.jpg

石頭 iT邦研究生 3 級 ‧ 2019-05-21 11:15:42 檢舉

上面的錯誤是因為 [變數作用範圍] 在外面的query並不知道if 中的query變數

0
sion
iT邦新手 5 級 ‧ 2019-05-21 09:57:17

你JOIN語法打錯了吧
應該是 on x.a欄位 equals y.a欄位
where devicebarcode01 == ...
跟SQL語法一樣啊

var query = (from x in _repo.HD_RECORD_BEFORE
             join y in _repo.HD_DEVICED_HISTORY_LIST
             on devicebarcode01 equals y.DEV_BARCODE 
                         where y.END_RECORD_DATETIME == null &&
                         x.PAT_SCHEDULE_GUID == y.PAT_SCHEDULE_GUID &&
                         DbFunctions.TruncateTime(x.DIA_DATE) ==
                         DbFunctions.TruncateTime(y.START_RECORD_DATETIME)
                         select x
                              ).ToList<HD_RECORD_BEFORE>();              
            return query;
tenno081 iT邦新手 4 級 ‧ 2019-05-21 10:02:06 檢舉

LINQ 的JOIN是這樣沒錯,

https://ithelp.ithome.com.tw/articles/10196394?sc=iThelpR

你可以稍微看一下

sion iT邦新手 5 級 ‧ 2019-05-21 10:11:02 檢舉

這篇寫的也是2個table的equals啊
還是我有漏看?
PS我剛剛 x.a欄位 on y.a欄位是打錯

tenno081 iT邦新手 4 級 ‧ 2019-05-21 10:17:14 檢舉

應該是你漏看了,

from c in Customers
join o in Orders on c.CustomerID equals o.CustomerID
select c.ContactName

跟我的差不多

我要發表回答

立即登入回答