[英]Using linq c# how can I select using a condition two different lists
這是我的數據模型:
public class GeneratedAlertDataModel : BaseEntity
{
/// <summary>
/// the alert that will be generated
/// from configuration of alert
/// </summary>
public string AlertText { get; set; }
public bool Read { get; set; }
public AlertDataModel Alert { get; set; }
public DateTime ReceivedDate { get; set; }
public bool Completed { get; set; }
}
public class AlertDataModel : BaseEntity
{
[Required]
[MaxLength(250)]
public string Designation { get; set; }
[Required]
public PriorityLevel PriorityLevel { get; set; }
public bool ShowOldAlerts { get; set; }
}
兩個表之間的關系是多對一的,一個Alert有多個生成的Alerts。
我有兩種情況:
我試過這樣做,但它不起作用:
var generatedAlertDbQuery = _context.GeneratedAlerts.Include(a => a.Alert)
// if set ShowAlert to false, get only the not viewed generated alerts
.Where(a => a.Alert.ShowOldAlerts).Select(a => a)
// if set ShowAlert to true, get only the not viewed generated alerts
.Where(a => !a.Alert.ShowOldAlerts).Select(a => a).Where(a => !a.Read)
.OrderBy(a => a.ReceivedDate) // Ordered by the receive date
.Take(take) // Taking maximum (will be configured in client)
.AsQueryable();
var generatedAlertResponse = await generatedAlertDbQuery.Select(a => new GeneratedAlertResponse
{
Id = a.Id,
Alert = _mapper.Map<AlertInfoResponse>(a.Alert),
ReceivedDate = a.ReceivedDate,
Completed = a.Completed,
}).ToListAsync();
也許你正在尋找這個。
在哪里過濾
x.Alert.ShowOldAlerts == true
或者
x.Alert.ShowOldAlerts == false && Read == false
例子
var results = _context.GeneratedAlerts
.Include(a => a.Alert)
.Where(x => x.Alert.ShowOldAlerts || !x.Read)
.Select(a => new GeneratedAlertResponse
{
Id = a.Id,
Alert = _mapper.Map<AlertInfoResponse>(a.Alert),
ReceivedDate = a.ReceivedDate,
Completed = a.Completed
...
}.ToList();
如果您需要分離結果,最好仍然保留一個查詢(到數據庫的一次往返),但是您可以在事后過濾結果。
var alerts = results.Where(x => x.Alert.ShowOldAlerts);
var read = results.Axcept(alerts );
對於第一種情況,如果Read
為 true 且ShowOldAlerts
為 false,則檢索生成的警報。 如果我正確理解了這個問題,這應該有效。
var alerts = _context.GeneratedAlerts
.Where(c => c.Read && !c.Alert.ShowOldAlerts);
對於第二種情況,僅當ShowOldAlerts
為 false 時才檢索生成的警報。
var alerts = _context.GeneratedAlerts
.Where(c => c.Alert.ShowOldAlerts);
作為一個列表返回,條件似乎很尷尬,但在這里
var alerts = _context.GeneratedAlerts
.Where(c => (c.Read && !c.Alert.ShowOldAlerts) || c.Alert.ShowOldAlerts);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.