我一直在嘗試將簡單的 if else 轉換為 linq 陳述句。
if else 陳述句是這樣的:
if ( MessageStatus = 1 )
then MessageCount > 0
else if ( MessageStatus = 2 )
then MessageCount = 0
else
do nothing
到目前為止,這就是我在我的 linq 中所擁有的,它沒有查詢出我想要的資料
var query = _context.Message
.Where(c => request.MessageStatus.Equal(2) ? c.MessageCount.Equals(0) :
request.MessageStatus.Equal(1) ? c.MessageCount > 0 :
request.MessageStatus.Equal(0));
它應該能夠回傳資料行,但它什么也不回傳。
問題出在哪里?
謝謝
uj5u.com熱心網友回復:
您要問的是條件過濾。request.MessageStatus是您在執行查詢之前知道的值,因此您可以使用它來定義Where要添加到查詢中的值。
這可以通過IQueryable<...>為整個資料集(您的表)創建一個,然后根據某些條件添加您想要的。Where重要的是要注意你總是在做query = query.Where(...);,如果你不重新分配query你會失去額外的過濾器。
// "request" is defined earlier
IQueryable<Message> query = _context.Message; // might need .AsQueryable() here
if (request.MessageStatus == 1)
{
query = query.Where(r => r.MessageCount > 0);
}
else if (request.MessageStatus == 2)
{
query = query.Where(r => r.MessageCount = 0);
}
else
{
// assuming that this means "include all records",
// don't perform any additional filtering
// you don't need this "else"
}
List<Message> results = query.ToList();
還很高興知道這種模式在 EF 之外也適用于 basic IEnumerables 和記憶體集合。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/498393.html
上一篇:你如何只對npgsql使用“使用”而不是trycatchfinally?
下一篇:如何允許可為空的布爾URI引數?
