Использование LinqDataSource с linq для совместного использования для подкачки - PullRequest
0 голосов
/ 02 мая 2011

Я разрабатываю визуальную веб-часть 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 Ответ

3 голосов
/ 18 октября 2011

для меня помогла следующая работа:

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.

...