【发布时间】:2020-01-06 18:01:12
【问题描述】:
这对我来说使用 LINQ 似乎有点困难。我有一个警报列表,警报看起来像:
public short AlertTypeId { get; set; }
public string Type { get; set; }
public int Severity { get; set; }
public bool IsOverview { get; set; }
public string Title { get; set; }
public string Text { get; set; }
public int Position { get; set; }
public string Id { get; internal set; }
- 我想首先按 alertIDType 对这些警报进行分组,
- 在 desc 和 ... 中按严重性对单个组中的元素进行排序
- 然后按特定顺序按相同的 alertIDType 对整个组进行排序(我有一个用于下面提到的 utils 排序器)
目前排序代码如下:
var alerts = new BPAlerts
{
AllAlerts = intakeAlerts.Select(
alert => new BPAlert
{
AlertTypeId = alert.AlertTypeId ?? 8100,
IsOverview = alert.IsOverviewAlert.GetValueOrDefault(),
Text = alert.AlertText,
Title = alert.AlertTitle,
Type = alert.AlertTypeId == 8106 ? "warning" : "report",
Severity = alert.AlertSeverity.GetValueOrDefault(),
Position = alert.Position.GetValueOrDefault()
}).ToList()
};
alerts.AllAlerts = alerts.AllAlerts.GroupBy(a => a.AlertTypeId)
.OrderByDescending(g => Utils.AlertSorterUtil.SortByAlertTypeId(g.Key))
.SelectMany(g => g.OrderByDescending(a => a.Severity)).ToList();
// Alerts displayed on the overview page
alerts.OverviewAlerts =
alerts.AllAlerts
.ToList()
.Where(a => a.IsOverview && !string.IsNullOrEmpty(a.Title))
.Take(3)
.ToList();
Utils sorter 方法如下:
public class AlertSorterUtil
{
public static int SortByAlertTypeId(short alertTypeId)
{
var orderArray = new int[]
{
8106, // Confirmed Out of Business
8105, // Bankruptcy
8111, // Lack of Licensing
8109, // Investigations
8103, // Government Actions
8104, // Pattern of Complaints
8112, // Customer Reviews
8110, // Accreditation
8101, // Misuse of BBB Name
8107, // Advisory
8102, // Advertising Review
};
for (int orderValue = 0; orderValue < orderArray.Length; orderValue++)
{
if (alertTypeId == orderArray[orderValue])
{
return orderValue;
}
}
return int.MaxValue;
}
}
【问题讨论】:
-
您是否尝试添加
GroupBy?我没有看到您尝试在帖子中对这些内容进行分组。 -
是的,我有。分组后是什么?你如何对单个组的元素进行排序?然后根据他们的 alertID 分组属性重新排列整个组?
标签: c# asp.net .net entity-framework linq