簡體   English   中英

C# linq 拆分,排序並加入值

[英]C# linq split ,order by and join the value

我有以下代碼。 它像我一樣工作。 但我想減少行代碼的數量。 在 foreach 循環中,我正在進行拆分,排序並加入值。 那么我們可以用其他方式編寫它嗎?

class a
{
 public string Test { get; set; }
 public string Code { get; set; }
}

var masterFormList = "BBB,AAA,CCC,FFF,GGG,HHH";
List<a> mData = new List<a>();
 
mData.Add(new a { Test = "AAA,BBB,CCC,FFF,GGG,HHH", Code = "A" });
mData.Add(new a { Test = "BBB", Code = "B" });
mData.Add(new a { Test = "CCC", Code = "C" });
mData.Add(new a { Test = "FFF", Code = "D" });
mData.Add(new a { Test = "GGG", Code = "E" });
mData.Add(new a { Test = "HHH", Code = "F" });
var masterSet = masterFormList.Split(',').OrderBy(y => y);
var l = string.Join(",", masterSet);
    
    
string value = "";
foreach (var item in mData)
{
   var listSplite = item.Test.Split(',').OrderBy(y => y);
     if (l == string.Join(",", listSplite))
     {
     value = item.Code;
    
      }
  }

如我所見,您想查找在Test屬性中給出了代碼列表的元素。 為此,我會編寫幫助方法並使用 LINQ 方法,如下所示:

var masterFormList = "BBB,AAA,CCC,FFF,GGG,HHH";

List<ExampleClass> mData = new List<ExampleClass>();

mData.Add(new ExampleClass { Test = "AAA,BBB,CCC,FFF,GGG,HHH", Code = "A" });
mData.Add(new ExampleClass { Test = "BBB", Code = "B" });
mData.Add(new ExampleClass { Test = "CCC", Code = "C" });
mData.Add(new ExampleClass { Test = "FFF", Code = "D" });
mData.Add(new ExampleClass { Test = "GGG", Code = "E" });
mData.Add(new ExampleClass { Test = "HHH", Code = "F" });

// You can use here also Where method that will return list of items
var masterItem = mData.FirstOrDefault(x => AreListsEquivalent(masterFormList, x.Test));

Console.ReadKey();

// Helper method to compare list in form of comma separated values.
static bool AreListsEquivalent(string list1, string list2)
{

    return list1.Split(',').ToHashSet()
        .SetEquals(list2.Split(',').ToHashSet());
}

// Test class
public class ExampleClass
{
    public string Test { get; set; }
    public string Code { get; set; }
}

在此處輸入圖像描述

我認為您可以只進行字符串比較,但使用 LINQ 可以更縮寫:

var masterKey = String.Join(",", masterFormList.Split(',').OrderBy(y => y));

var value = mData.Where(a => masterKey == String.Join(",", a.Test.Split(',').OrderBy(y => y)))
                 .LastOrDefault()
                 ?.Code;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM