我需要根據 if-else 條件在 where 添加 1 個額外條件,但代碼變得多余。請幫助創建一個常見的查詢。
if (isFailure)
{
var result = (from account in context.Account
join filetrans in context.FILE_TRANSACTION on account.ACCOUNTID equals filetrans.ACNT_ID
where accountIds.Contains(account.ACCOUNTID) && filetrans.PROCESS_STRT_TIME >= fromDateFilter && filetrans.PROCESS_STRT_TIME <= toDateFilter **&& failureStatus.Contains((decimal)filetrans.CRNT_FILE_STATUS_ID)**
select new
{
account.ACCOUNTINFO,
filetrans.ACNT_ID,
filetrans.FILE_TRANID,
filetrans.FILE_NM,
filetrans.PROCESS_STRT_TIME,
filetrans.CRNT_FILE_STATUS_ID
} )
.OrderByDescending(o => o.PROCESS_STRT_TIME)
.Skip(skip).Take(pageSize).ToList();
}
else
{
var result = (from account in context.Account
join filetrans in context.AFRS_FILE_TRANSACTION on account.ACCOUNTID equals filetrans.ACNT_ID
where accountIds.Contains(account.ACCOUNTID) && filetrans.PROCESS_STRT_TIME >= fromDateFilter && filetrans.PROCESS_STRT_TIME <= toDateFilter
select new
{
account.ACCOUNTINFO,
filetrans.ACNT_ID,
filetrans.FILE_TRANID,
filetrans.FILE_NM,
filetrans.PROCESS_STRT_TIME,
filetrans.CRNT_FILE_STATUS_ID
})
.OrderByDescending(o => o.PROCESS_STRT_TIME)
.Skip(skip).Take(pageSize).ToList();
}
uj5u.com熱心網友回復:
LINQ 的主要好處是可以組合查詢。提取公共部分并稍后應用所需的過濾器。
var query =
from account in context.Account
join filetrans in context.FILE_TRANSACTION on account.ACCOUNTID equals filetrans.ACNT_ID
where accountIds.Contains(account.ACCOUNTID) &&
filetrans.PROCESS_STRT_TIME >= fromDateFilter &&
filetrans.PROCESS_STRT_TIME <= toDateFilter
select new { account, filetrans };
if (isFailure)
{
query = query.Where(x => failureStatus.Contains((decimal)x.filetrans.CRNT_FILE_STATUS_ID))
}
var result = query
.Select(x => new
{
x.account.ACCOUNTINFO,
x.filetrans.ACNT_ID,
x.filetrans.FILE_TRANID,
x.filetrans.FILE_NM,
x.filetrans.PROCESS_STRT_TIME,
x.filetrans.CRNT_FILE_STATUS_ID
})
.OrderByDescending(o => o.PROCESS_STRT_TIME)
.Skip(skip).Take(pageSize)
.ToList();
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/362030.html
下一篇:為什么這更有效?
