簡體   English   中英

Linq 對於實體,where 條件下的鍵值對很少

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM