Привязка таблиц LinqToSql к повторителю - PullRequest
2 голосов
/ 31 января 2010

У меня есть класс, который извлекает данные из БД.

[Table(Name = "Ilanlar")]
public class Ilan
{

    [Column(Name="ilan_id" ,IsPrimaryKey = true)]
    public int M_ilan_id;

    [Column(Name="refVerenUser_id")]
    public int M_refVerenUser_id;
}

И я связываю данные, поступающие из БД через класс выше.

    private void ItemsGet()
    {
        PagedDataSource objPds = new PagedDataSource();
        objPds.DataSource =  f_IlanlariGetir(CurrentPage);
        objPds.AllowPaging = true;
        objPds.PageSize = 3;

        objPds.CurrentPageIndex = CurrentPage;

        rptIlanlar.DataSource = objPds;  //rptIlanlar = asp:Repeater
        rptIlanlar.DataBind();
    }

    protected void Page_Load(object sender, EventArgs e)
    {
        ItemsGet();
    }

    private System.Collections.IEnumerable f_IlanlariGetir(int p)
    {
        Context context = new Context(DAO.dbYaban.ConnectionString);

        return context.GetTable<Ilan>();
    }

Но результат IEnumerable, но мне нужно что-то вроде DataSet. Я получаю эту ошибку:

Cannot compute Count for a data source that does not implement ICollection.

Я нашел хорошее объяснение этой ошибке, это:

Базовый источник данных должен поддерживать интерфейс ICollection в заказ на сетку для автоматического пейджинга. ICollection требует класс для реализации свойства Count. ArrayList и DataView оба поддерживать интерфейс, чтобы вы могли использовать их как DataSources. Другие классы поддерживают только интерфейс IEnumerable. Это позволяет им для использования в качестве источника данных, но не в качестве источника данных с подкачкой. SqlDataReader был бы примером такого класса. Ссылка

Но мне нужно связать повторитель с результатами linq к таблицам sql. Что мне делать?

1 Ответ

1 голос
/ 31 января 2010

Вместо привязки непосредственно к запросу, попробуйте:

return context.GetTable<Ilan>().ToList();
...