2013-11-15 50 views
0

需要一些帮助,这里有一些Linq查询。按字符串自定义过滤器排序列表

我想把自定义顺序中的一个列表放在一起,我可以为两个参数进行排序,但第三个参数似乎要难得多。

我目前所面对的是什么:

return this.currentDocuments.OrderByDescending(x => x.Created).ThenBy(x => x.Description).toList(); 

现在我需要添加这是由一个XML字段中的字符串设定第三个参数。我有一个字段只是一串字母,需要使用字符串的最后两个字母来定义顺序。

任何人都可以启发我如何做到这一点?这是可以用Linq完成的事情,还是我需要编写一个单独的方法来做到这一点?

此外,有9个不同的选项可用于输出字符串的最后两位数字,因此我需要找到使用所有选项的最简单方法。

任何意见/指针/帮助赞赏和道歉,如果这是一个庞大的问题..但我们都需要学习!

谢谢。

+1

你应该看看动态linq –

+0

你的问题有点不清楚。 “XML字段中的字符串”是什么意思? XML字段在哪里? –

+0

对不起,该字段位于标签内的XML文件中。希望更有意义。 – user2039317

回答

0

正如延斯克洛斯特建议,你应该看看动态Linq的这个问题。

看看这个帖子的例子和代码。一个限制是你必须使用IQueryable<T>而不是IEnumerable<T>,但这可能不成问题。

您的代码将然后是这个样子:

var sortingCodeToSortField = new Dictionary<string,string> 
    { {"ei", "EmployeeId"}, {"na", "Name"}, {"ag", "Age" } }; 

string sortCode = GetSortCodeFromXml(inputXml); 
string fieldToSortOn = sortingCodeToSortField[sortCode]; 

var whatYouHaveSoFar = this.currentDocuments.OrderByDescending(x => x.Created).ThenBy(x => x.Description); 

var whatYouWant = whatYouHaveSoFar.AsQueryable.OrderBy(fieldToSortOn); 

return whatYouWant.ToList(); 

动态的LINQ库可以是一个小傻瓜;请务必查看下载的html页面,因为它具有比Scott Gu的帖子更好的文档。祝你好运,并随时再问一次,如果我误解了一些东西。