2011-04-10 88 views
0
List<DatsWussup.Models.Message> messages = mc.GetMessages(); 
List<DatsWussup.Models.JQGridMessage> gridMessages = FormatMessages(messages); 

int pageIndex = Convert.ToInt32(page) - 1; 
int pageSize = rows; 
int totalRecords = gridMessages.Count; 
int totalPages = (int)Math.Ceiling((float)totalRecords/(float)pageSize); 

var questions = gridMessages 
    .OrderBy(sidx + " " + sord) 
    .Skip(pageIndex * pageSize) 
    .Take(pageSize); 

列表 所以我连同jqGrid的和MVC莅临指导以下几点: http://haacked.com/archive/2009/04/14/using-jquery-grid-with-asp.net-mvc.aspx,并在他还说排序/分页的一步,我把上面的代码从博客。 排序使用LINQ

现在,您可以通过查看代码来了解我正在尝试做什么,特别是如果您熟悉JqGrids和MVC一起工作。然而,我得到这个错误:

The type arguments for method 'System.Linq.Enumerable.OrderBy(System.Collections.Generic.IEnumerable, System.Func)' cannot be inferred from the usage. Try specifying the type arguments explicitly.

当我尝试编译上述代码。我对LINQ或任何代表都不太了解,我能否获得一些帮助?

谢谢!

+1

'sidx'和'sord'的类型是什么,它们在哪里声明? – 2011-04-10 18:36:15

+0

它们都是字符串,它们作为参数发送到此代码从前端获取的函数中。该代码位于控制器功能中。 – Scott 2011-04-10 18:37:00

回答

1

OrderBy()它可以是一个Func<TSource, TKey>代表,表达Expression<Func<TSource, TKey>>或者如果你有DLINQ,一个字符串。博客提到你需要DLINQ并链接到download pageScottGu's article。显然你没有它。

下载它,将LinqSamples\DynamicQuery\DynamicQuery\Dynamic.cs添加到您的项目并使用System.Linq.Dynamic命名空间,它应该提供给你。

0

OrderBy期待一个lambda表达式,也许是这样的:

var questions = gridMessages 
    .OrderBy(m => m.sidx + " " + m.sord) 
    .Skip(pageIndex * pageSize) 
    .Take(pageSize); 
+0

sidx和sord是由前端jqgrid传递给我的属性。 sidx是要排序的列名,sord是排序类型(asc或desc)。该模型没有这些属性,所以这将不起作用=/ – Scott 2011-04-10 18:33:20

+0

然后你不能这样做,无论如何,你需要动态地建立一个表达式。 – 2011-04-10 18:34:55

+0

这个人在他的博客中链接的博客中的示例中如何做? – Scott 2011-04-10 18:36:24