我有一個給定欄位的集合:
class InternalConditionModel
{
public string ProductId { get; set; }
public double Value { get; set; }
public DateTime DateFrom { get; set; }
public DateTime DateThru { get; set; }
public bool IsSSoldOnlyOnDisplay { get; set; }
}
并且必須根據給定的條件對其進行過濾:
如果集合中有多個具有相同 ProductId 的專案,我會檢查 IsSoldOnlyOnDisplay 并選擇產生 true 的專案。但是,如果有不止一個是真的,我會選擇價值最大的專案。
通過 GroupBy(ProductId) 執行此操作,然后執行多個 ifs/foreaches 非常簡單。但我想知道是否有可能用 linq 將它簡化為“更漂亮”的東西。
uj5u.com熱心網友回復:
這應該這樣做:
var result = items.GroupBy(x => x.ProductId).Select(x => x.OrderByDescending(y => y.Value).FirstOrDefault(y => x.Count(z => z.IsSSoldOnlyOnDisplay) == 1 ? y.IsSSoldOnlyOnDisplay : true));
首先,我們按產品 ID 分組。然后我們按值對每個組進行降序排序(具有最大值的專案將是第一個)。在這個排序的組中,我們取第一個專案。如果組中只有一項為IsSSoldOnlyOnDisplay真,則條件FirstOrDefault為IsSSoldOnlyOnDisplay,否則條件為true,即只取組中的第一項。由于較早發生的排序,它將是具有最高值的排序。
但是想想你自己,這段代碼是否真的比一些回圈和 if 更好。我不建議將所有內容都強制到單個 LINQ 查詢中。
在線演示:https ://dotnetfiddle.net/SzuL0p
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/478171.html
