[英]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.