Orderby C#字符串记录

Kri*_*eil 1 c# linq

对于从db读取的记录,然后构建一个字符串,我具有以下orderby。以下代码可以正常工作,但是我知道可以改进任何建议,对此表示高度赞赏。

  result.Sites.ForEach(x =>
                {
                    result.SiteDetails +=
                        string.Concat(ICMSRepository.Instance.GetSiteInformationById(x.SiteInformationId).SiteCode,
                            ",");
                });
                //Sort(Orderby) sites by string value NOT by numerical order
                result.SiteDetails = result.SiteDetails.Trim(',');
                List<string> siteCodes = result.SiteDetails.Split(',').ToList();
                var siteCodesOrder = siteCodes.OrderBy(x => x).ToArray();
                string siteCodesSorted = string.Join(", ", siteCodesOrder);
                result.SiteDetails = siteCodesSorted;
Run Code Online (Sandbox Code Playgroud)

Cor*_*rey 5

是的,这有点令人费解。

我们需要做的就是选择SiteCodeas字符串,用排序OrderBy,然后加入结果。因为String::Join有一个可以使用的变体,所以IEnumerable<string>我们不需要在中间转换为数组。

我们最终得到的是分配给您的SiteDetails会员的单一声明:

result.SiteDetails = string.Join(", ", 
    result.Sites
    .Select(x => $"{ICMSRepository.Instance.GetSiteInformationById(x.SiteInformationId).SiteCode}")
    .OrderBy(x => x)
);
Run Code Online (Sandbox Code Playgroud)

(或者您可以使用.ToString()代替$"{...}"


这是LINQ中大多数转换的一般过程。弄清楚您的输入是什么,需要使用它们做什么,以及输出应如何显示。

如果您使用的是LINQ,除非您做的很复杂,否则通常必须构建和操作中介列表。对于诸如排序值序列之类的简单任务,几乎没有理由将它们放入过渡集合中,因为该框架会为您处理所有这些。

最好的部分是它一次枚举集合以获取完整的数据集。没有更多的循环可以拉出数据,然后进行处理,然后进行重建。