亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Linq GroupBy 并取不為空的條目

Linq GroupBy 并取不為空的條目

C#
哈士奇WWW 2022-01-15 19:34:24
Selection 類有 4 個屬性:public class Selection{    string IdSelectionType {get; set;}    string Name {get; set;}    decimal? OddValue {get; set;}    bool Visible {get; set;}}示例數據var originalList = new List<Selection>()        {            new Selection() {IdSelectionType = "1", Name = "Under (75.50)", Visible = true},            new Selection() {IdSelectionType = "2", Name = "Under (75.50)", Visible = true},            new Selection() {IdSelectionType = "1", Name = "Under (75.50)", OddValue = 1.840m, Visible = true},            new Selection() {IdSelectionType = "2", Name = "Under (75.50)", OddValue = 1.860m, Visible = true},        };我想選擇一個列表,如果有另一個相同但具有 OddValue 的元素!= null,則丟棄具有 OddValue = null 的元素。是否有任何 Linq / MoreLinq 運算符可以做類似的事情?Selections.GroupBy(s =>          new {s.IdSelectionType, s.Name, s.OddValue, s.Visible})          .Select(g => g.First()).ToList();預期的結果是:
查看完整描述

2 回答

?
弒天下

TA貢獻1818條經驗 獲得超8個贊

var result = items.OrderBy(x => x.Name)
                  .ThenByDescending(x => x.OddValue)
                  .GroupBy(s => new {s.IdSelectionType, s.Name, s.Visible})
                  .Select(x => x.FirstOrDefault())
                  .ToList();

首先對項目排序NameOddValue然后按分組Name。OddValue != null在帶有 的條目之前,您將擁有帶有的條目OddValue == null。然后取每個分組的第一個條目。

這也將返回OddValue == null具有相同的條目,而沒有其他條目Name。

最終結果:https ://dotnetfiddle.net/jZ5gs2


查看完整回答
反對 回復 2022-01-15
?
MMMHUHU

TA貢獻1834條經驗 獲得超8個贊

你可以使用聯合。選擇所有不具有 OddValue == null 的元素,然后將剩余的(具有 null 的元素)與第一個列表合并。


https://linqsamples.com/linq-to-objects/set/Union


var originalList = new[]

        {

            new Selection() {IdSelectionType = "1", Name = "Under (75.50)", Visible = true},

            new Selection() {IdSelectionType = "2", Name = "Under (75.50)", Visible = true},

            //new Selection() {IdSelectionType = "1", Name = "Under (75.50)", OddValue = 1.840m, Visible = true},

            new Selection() {IdSelectionType = "2", Name = "Under (75.50)", OddValue = 1.860m, Visible = true},

        };


        var noneNulls = originalList.Where(ol => ol.OddValue != null);


        var endList = originalList

            .Where(ol => !noneNulls.Select(nn => nn.IdSelectionType).Contains(ol.IdSelectionType))

            .Union(noneNulls);

工作示例:https ://dotnetfiddle.net/UJ8FaS


查看完整回答
反對 回復 2022-01-15
  • 2 回答
  • 0 關注
  • 313 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號