使用基于类集合的LINQ订购DataTable

时间:2013-06-03 11:38:34

标签: c# linq

我有一个班级,我就像这样创作它的集合

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();

数据表仅包含名称而不包含ID,并且名称总是小于集合。 (bcoz collection是主人收藏)

现在我想基于"name"对我的数据表进行排序,但是基于对基于id的Foo类集合的排序。

排序数据表后的结果应为

Michael
Casandra
Natasha

我试过

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

1 个答案:

答案 0 :(得分: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).