使用LINQ基于类集合对DataTable进行排序

3
我有一个类,我创建它的集合如下:
class Foo
{
    public int ID { get; set; } 
    // ID will remain unique in collection

    public string Name { get; set; }
}

List<Foo> sc = new List<Foo>();

sc.Add(new Foo()
{
    ID = 0,
    Name= "Michael"
});

sc.Add(new Foo()
{
    ID = 2,
    Name= "Natasha"
});

sc.Add(new Foo()
{
    ID = 1,
    Name= "Casandra"
});

然后我得到了一个 DataTable

DataTable dt = GetDataTableMethod();
Name
Foo1
Foo2
Foo3
Foo4
Michael
Casandra
Natasha

我尝试过

var v = dt.Rows.Cast<DataRow>().OrderBy(What should i write here?);

1
我猜这样写可以吗?var v = dt.Rows.Cast<DataRow>().OrderBy(row => row["Name"]); - Chris Sinclair
var v = dt.Rows.Cast<DataRow>().OrderBy(c => c["name"]); - Leri
哎呀,我看错了问题。你是想按它们关联的“ID”排序名称,对吗?@NikhilAgrawal 是的,刚刚注意到这一点。 :) - Chris Sinclair
@NikhilAgrawal 你在 GetDataTableMethod() 中为你的 DataTable 定义/填充了哪些列? - Chris Sinclair
1
@NikhilAgrawal “现在我想根据“名称”对我的数据表进行排序,但是基于Foo类集合的排序”这很令人困惑。也许您想按“ID”而不是按“名称”排序,是吗? - Leri
显示剩余4条评论
1个回答

2
据我理解,您有一个包含id数据的集合,并且有一个返回仅包含其中一个组件的DataTable的存储过程。最简单的方法是遍历数据行列表,并匹配完整列表中的相应值,然后进行排序:
 List<Foo> sc = new List<Foo>();

 sc.Add(new Foo()
 {
    ID = 0,
    Name = "Michael"
 });

 sc.Add(new Foo()
 {
    ID = 2,
    Name = "Natasha"
 });

 sc.Add(new Foo()
 {
    ID = 1,
    Name = "Casandra"
 });

 List<string> dt = new List<string>(); //For testing replaced just by string.

 dt.Add("Michael");

 dt.Add("Natasha");

 dt.Add("Casandra");

 var ordered = dt.Select(i => sc.First(c => c.Name == i)).OrderBy(i => i.ID);

Demo (sorry for awful formatting).


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接