假设我们有两个表父“DocumentCodes”和Child“Documents”。 DocumentCodes表具有列DID,DocumentName,PrintOrder和AscOrDesc 文档表具有列ID,DID和EffectiveDate.We通过连接这两个表获取数据表。基于行值的LINQ OrderBy
我们需要根据以下规则对此数据表进行排序。
- 按“PrintOrder”列排序。
- 如果两行或更多行具有相似的“DocumentNames”值,则根据“AscOrDesc”值按“EffeciveDate”升序或降序排序。 “AscOrDesc”列仅接受'A'或'D'。如果值是'A',我们需要对“EffectiveDate”进行升序排序,如果值是'D',则需要对“EffectiveDate”进行降序排序。
例如,
DocumentCodes
DID DocumentName PrintOrder AscOrDesc
1 Test1 1 D
2 Test2 2 A
3 Test3 3 D
文献
ID DID EffectiveDate
1 2 7/9/2017
2 1 5/5/2017
3 2 7/8/2017
4 3 4/9/2017
以上两个表之后加入。我们有DataTable。
ID DocumentName EffectiveDate PrintOrder AscOrDesc
1 Test2 7/9/2017 2 A
2 Test1 5/5/2017 1 D
3 Test2 7/8/2017 2 A
4 Test3 4/9/2017 3 D
现在使用上述规则对此DataTable进行排序后。 DataTable应该看起来像这样。
ID DocumentName EffectiveDate PrintOrder AscOrDesc
1 Test1 5/5/2017 1 D
2 Test2 7/8/2017 2 A
3 Test2 7/9/2017 2 A
4 Test3 4/9/2017 3 D
注意:EffectiveDate格式为MM/DD/YYYY格式。
我试着用下面的代码,但它不工作。
var records2 = from q in datatable.AsEnumerable()
let sortorder= q.Field<string>("AscOrDesc") == "A" ?
"q.Field<DateTime>(\"EffectiveDate\") ascending":
"q.Field<DateTime>(\"EffectiveDate\") descending"
orderby q.Field<int>("PrintOrder"),sortorder
select q;
我在做什么错在上面的代码?
它没有多大意义了中行的排序中指定*在行中* - 如果一行的AscOrDesc设置为'A'而另一行的AscOrDesc设置为'D'会怎么样?这两行如何比较? –
从来没有使用过LINQ to SQL,但这样做甚至可以工作你在做什么?谈论你正在构建的字符串,LINQ to SQL解析字符串并且做到了魔法?我有点相信它只是通过这个字符串来完成命令,所以完全是虚拟的......但也许?!? –
Hi @JonSkeet,对于每个文档名将具有特定的“AscOrDesc”值。因此,如果相同的文档名称出现两次,“AscOrDesc”将相同。 –