【问题标题】:How reorder a typed list using linq using the orderBy a string?如何使用 linq 使用 orderBy 字符串重新排序类型列表?
【发布时间】:2017-07-15 12:14:22
【问题描述】:

我想使用 linq 重新排序此列表,但重新排序的列表必须与原始列表的类型相同(没有愚蠢的“var =”),并且“排序依据”提供为 STRING (不是常规的 OrderBy 类型安全)。

public class People{
public string Name { get; set; }
public int Age { get; set; }    }

List<People> lst = new List<People>();
People p = new People();
p.Name = "AAA";
p.Age = 10;
lst.Add(p);

p = new People();
p.Name = "XXX";
p.Age = 5;
lst.Add(p);

List<People> orderedListByAge = lst.SomeSort("Age");    
List<People> orderedListByName = lst.SomeSort("Name");

【问题讨论】:

  • 你不明白var是什么吗?同时展示你到目前为止所做的事情。这是免费的非代码编写网站。请参阅stackoverflow.com/help/how-to-askstackoverflow.com/help/mcve
  • (没有愚蠢的“var =”) 你为什么这么反对这种类型的简写?我不在乎 linq 查询产生什么数据类型,但它做了什么。我的意思是,在每个查询上使用 .ToList() 并不是 linq 的懒惰特性,它不会让你的查询更容易阅读。
  • "var=" 很愚蠢,因为 1) 记住我的无类型代码,比如可怕的语言 javascript 和 visual fox pro。 2)“var=”后面如果需要以类型化的方式使用结果集,则需要进行强制转换。 3)在许多情况下,代码的可读性较差。例如:var=MyMethod()。您需要检查方法的返回值以了解发生了什么。 4)提醒我指针。我努力避免在我的代码中出现“var=”。有很多方法可以使编码更容易。在我看来,“var=" 不是其中之一。

标签: .net linq list sorting dynamic


【解决方案1】:

你可以这样做:

        List<People> lst = new List<People> {
            new People { Name = "AAA", Age = 10},
            new People { Name = "XXX", Age = 5}
        };

        List<People> foo = lst.OrderBy(x => x.Age).ToList();
        List<People> bar = lst.OrderBy(x => x.Name).ToList();

【讨论】:

  • 你需要ToList()
  • lst.OrderBy(x => x.Age)
【解决方案2】:

经过一番研究,我发现了这个例子here

有一个带有一些示例的 zip。解决我的问题的课程是“DynamicExample.cs”。铸造是这样完成的:

List<People> orderedByAge = (List<People>)DynamicExample.OrderBy(lst, "Age").Cast<People>().ToList();

【讨论】:

    猜你喜欢
    • 2013-07-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-17
    • 1970-01-01
    • 2018-01-12
    • 1970-01-01
    相关资源
    最近更新 更多