Использование LinqDataSource с linq для совместного использования для подкачки
Я разрабатываю визуальную веб-часть Sharepoint 2010 и пытаюсь использовать в ней LinqDataSource для обработки подкачки и сортировки в GridView. Я сделал свой объект данных и текстовые объекты с помощью spmetal. и теперь это мой код:
моя наценка:
<%@ Register TagPrefix="asp" Namespace="System.Web.UI.WebControls" Assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" %>
<asp:LinqDataSource runat="server" ID="LinqDataSource1" OnSelecting="MySelecting" />
<asp:GridView ID="GridView1" runat="server" AllowPaging="True" PageSize="3"
AutoGenerateColumns="False" DataSourceID="LinqDataSource1"
EnableModelValidation="True">
<Columns>
<asp:BoundField DataField="title" HeaderText="Title" />
</Columns>
</asp:GridView>
и мой код:
protected void MySelecting(object sender, LinqDataSourceSelectEventArgs e)
{
TestEntitiesDataContext dc = new TestEntitiesDataContext("http://sp/sites/test");
e.Result = from item in dc.TestList
select new
{
title = item.Title,
numberField = item.NumberField.ToString()
};
}
Теперь проблема в том, что когда я пытаюсь просмотреть веб-часть на сайте, я получаю эту ошибку:Выражение типа "System.Int32" нельзя использовать для типа возвращаемого значения "System.Object".
Когда я деактивирую пейджинг в сетке, эта ошибка исчезает.
Есть ли у вас идеи, почему это происходит?
Буду благодарен за любую помощь.
1 ответ
Для меня помогла следующая работа:
LinqDataSource1.AutoPage = false;
LinqDataSource1.AutoSort = false;
в MySelecting:
e.Result = [your nice LINQ expression].Skip(e.Arguments.StartRowIndex).Take(e.Arguments.MaximumRows);
e.Arguments.TotalRowCount = [your nice LINQ expression].Count();
И если вам нужна сортировка, вы должны также обработать e.Arguments.SortExpression.