Использование 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.

Другие вопросы по тегам