Каков правильный синтаксис для возврата IQueryable к элементу управления с привязкой к данным - PullRequest
0 голосов
/ 16 сентября 2011

Я делаю некоторый рефакторинг для устранения элементов управления SqlDataSource. Ниже приведен код из моего класса бизнес-логики, предназначенный для возврата списка изображений для данного идентификатора.

public class BusinessLogic
{        
    public IQueryable<SBMData2.File> GetPackageImages(int id)
    {
        SBMData2.SBMDataContext db = new SBMData2.SBMDataContext();

        IQueryable<SBMData2.File> PackageImages = from f in db.Files
                                                  where f.PackageID == id
                                                  select f;
        return PackageImages;

    }
}

В своем коде я пытаюсь связать объект IQueryable с ретранслятором asp, выполнив что-то вроде следующего.

int id = RadGrid1.SelectedValues["id"].ToString();
Repeater1.DataSource = BusinessLogic.GetPackageImages(id);
Repeater1.DataBind();

Шаблон моего элемента содержит простой тег изображения, который связывает FileName со связанным объектом IQueryable. Например:

<img src="PackageFile.ashx?Thumb=true&Id=<%# DataBinder.Eval(Container.DataItem, "FileName").ToString() %>" alt="loading image ..."/>

Мой вопрос состоит из двух частей. Во-первых, правильный ли мой синтаксис внутри класса BusinessLogic? Я подозреваю, что это не потому, что я не могу получить доступ к GetPackageImages из своего кода позади. Во-вторых, я почти уверен, что неправильно указал свой источник данных. Как я могу это исправить?

Спасибо!

1 Ответ

0 голосов
/ 16 сентября 2011

Вы объявили его как экземпляр метод, но вы пытаетесь использовать его как статический метод, если только у вас нет свойства с именем BusinessLogic типа BusinessLogic ... Попробуйте просто сделать его статическим:

public static IQueryable<SBMData2.File> GetPackageImages(int id)

Я не знаю много о привязке данных, но похоже, что может быть в порядке.

Лично я бы не использовал выражение запроса в GetPackageImages, и я бы также не назвал локальные переменные с помощью PascalCase. Я бы просто использовал:

SBMData2.SBMDataContext db = new SBMData2.SBMDataContext();
return db.Files.Where(f => f.PackageID == id);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...