我很难从给定的数据集中选择一些数据。假设我确实有没有指定类型的汽车列表。因此,我需要通过名称以及我知道类型的名称来选择它们。
var ItemList = Entries?.Where(entry => (entry?.Type?.IsCar() ?? false))
?.OrderBy(entry => entry?.Name?.RegexMatchSuccessIgnoreCase(@"ferrari|lamborghini|mclaren")) //sports cars
?.OrderBy(entry => entry?.Name?.RegexMatchSuccessIgnoreCase(@"bmw|audi|mercedes")) // personal cars
?.OrderBy(entry => entry?.Name?.RegexMatchSuccessIgnoreCase(@"man|iveco")) //trucks
?.ThenBy(entry => entry?.Weight ?? int.MaxValue)
?.ToArray();
这将为我提供所有汽车的清单,并按名称和重量排序,这还可以,但不完全。 我正在寻找的是能够按每种类型填充ItemList,并且如果该类型没有汽车,则用另一种类型填充。因此,首先ItemList必须只包含跑车,如果没有,则尝试找出私人汽车,如果没有,则尝试找出卡车。
例如像
var ItemList = Entries?.Select(entry =>
entry?.Name?.RegexMatchSuccessIgnoreCase(@"ferrari|lamborghini|mclaren") ?? //sports cars
entry?.Name?.RegexMatchSuccessIgnoreCase(@"bmw|audi|mercedes") ?? // personal cars
entry?.Name?.RegexMatchSuccessIgnoreCase(@"man|iveco") //trucks
).DefaultIfEmpty(false);
但是这给了我对/错,因为第一个返回可以使用的条目,有人可以让我的大脑怎么按类型选择它们,并且可以将它们用作条目吗?
谢谢
答案 0 :(得分:0)
我将尝试通过条件运算符回答您的问题:如何“能够按每种类型填充ItemList,如果该类型没有汽车,请使用另一种类型填充汽车”。由于您没有提供注释中指出的 MCVE ,因此我将使用一个简单的字符串列表作为示例(您应该能够通过简单的替换将其绘制到示例的上下文中,即而不是检查每个值,而是检查每个Regex匹配项)
var entries = new List<string>(){"a", "a", "b"};
var itemList = entries.Any(e => e == "a") ? entries.Where(e => e == "a")
: entries.Any(e => e == "b")
? entries.Where(e => e == "b") // continue for all your types
: null;
这个想法很简单,就是检查列表中是否包含与您特定类型的任何匹配项,如果是,则返回该类型的所有元素并短路,否则检查下一个类型,依此类推。您可能可以这样做更有效,这只是为您的问题提供可能的解决方案