[英]Linq To Entities, few key value pairs in where condition
我有一個“Tracking”表和“TrackingDetails”表。
跟蹤表
Id DateTime Description
100 2022-12-08T10:53 Package Picked Up
101 2022-12-08T10:59 Package is in lorry
TrackingDetails表【TrackingId是Tracking表Id列的外鍵】
Id TrackingId Key Value
45 100 Location Davis place
46 100 ResponsiblePerson John
47 100 ReferenceNo 102A788
48 100 Status PickedUp
49 101 Location Torington
50 101 ResponsiblePerson Driver : Mick
51 101 ReferenceNo 102A788
52 101 Status InTransit
我需要檢查是否有來自 referenceno=102A788 和 status=PickedUp 條件的記錄。
//Method 1
var isExist = _TrackingRepository.GetAll().Include(x => x.Details).Where(x => x.Details.Where(y => (y.Key == "ReferenceNo" && y.Value == "102A788") && (y.Key == "Status" && y.Value == "PickedUp")).Any()).Any();
但是即使數據庫中有可用記錄,此查詢也總是返回false 。 (預期值為真)
然后我在下面嘗試。
//Method 2
var isExist = _TrackingRepository.GetAll().Include(x => x.Details).Where(x => x.Details.Where(y => y.Key == "ReferenceNo").Any())
.Include(x => x.Details).Where(x => x.Details.Where(y => y.Value == "102A788").Any()).Any();
這將返回True並按預期工作。 但是我的問題是,沒有其他方法可以查詢我的病情嗎? 我覺得第二種方法有點難看,而且看起來不太好。 在這里我只檢查 2 個條件。 但是如果我檢查 10 個條件,我必須重復.Include(x => x.Details) 10 次。
請專家對此發表評論?
你的方法有幾個問題。 首先,條件 y.Key == "ReferenceNo" && y.Value == "102A788" && (y.Key == "Status" && y.Value == "PickedUp") 將始終返回 false,因為記錄不能“ReferenceNo”和“Status”的相同鍵和值。 您可以使用 && 運算符來檢查記錄是否具有“ReferenceNo”和“Status”鍵,但您需要分別檢查這些值。
這是您可以修改方法以檢查正確值的一種方法:
var isExist = _TrackingRepository.GetAll()
.Include(x => x.Details)
.Where(x => x.Details
.Any(y => y.Key == "ReferenceNo" && y.Value == "102A788")
&& x.Details
.Any(y => y.Key == "Status" && y.Value == "PickedUp")
).Any();
此方法將檢查 TrackingDetails 表中是否有任何記錄同時具有值為“102A788”的“ReferenceNo”鍵和值為“PickedUp”的“Status”鍵。 如果有符合這些條件的記錄,這應該返回 true。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.