如何簡化對資料庫的下一個查詢:
public Plan? Get(DateTime now)
{
return context.Plans
.Where(x => IsActivePlan(x, now)) // 1 condition
.Where(x => IsPlolongingPlan(x, now)) // 2 condition
.OrderBy(x => x.StartedAt)
.FirstOrDefault();
}
我需要什么:如果在 1 個條件之后有物件,則執行“OrderBy”并回傳第一個元素。如果沒有物件,則轉到條件2,執行“OrderBy”并回傳“FirstOrDefault”。我不希望物件同時被兩個條件拿走。
謝謝
uj5u.com熱心網友回復:
像這樣的東西
public Plan? Get(DateTime now)
{
return context.Plans.Where(x => IsActivePlan(x, now)).OrderBy(x => x.StartedAt).FirstOrDefault()
?? context.Plans.Where(x => IsPlolongingPlan(x, now)).OrderBy(x => x.StartedAt).FirstOrDefault();
}
uj5u.com熱心網友回復:
因為您不希望同時滿足兩個條件,所以您必須:
return context.Plans
.Where(x => (IsActivePlan(x, now) && !IsPlolongingPlan(x, now)) ||
(!IsActivePlan(x, now) && IsPlolongingPlan(x, now)))
.OrderBy(x => x.StartedAt)
.FirstOrDefault();
uj5u.com熱心網友回復:
您可以先檢查是否存在
像這樣:
var result = null;
if (context.Plans.Any(x => IsActivePlan(x, now)))
{
result = context.Plans.Where(x => IsActivePlan(x, now))
.OrderBy(x => x.StartedAt)
.FirstOrDefault();
}
else
{
result = context.Plans.Where(x => IsPlolongingPlan(x, now))
.OrderBy(x => x.StartedAt)
.FirstOrDefault();
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/426625.html
