Linq to sql - Связанные списки - PullRequest
       17

Linq to sql - Связанные списки

0 голосов
/ 13 ноября 2009

У меня есть схема linq to sql с сущностью «Клиенты», а также «Отчеты». Каждый клиент имеет ноль или более отчетов.

Я хочу, чтобы клиенты имели свойство LinkedList, чтобы я мог легко получить доступ к следующей и предыдущей сущности для каждого отчета.

Каков наилучший способ реализации этого с использованием linq to sql?

Спасибо

Ответы [ 2 ]

1 голос
/ 13 ноября 2009

Вы можете перейти к схеме проектирования вашего Linq to sql clas, щелкнуть правой кнопкой мыши заголовок окна Customer и выбрать Add-> Association. Появится диалоговое окно, и затем в их поле вы выбираете, чтобы клиент был родительским классом, сообщаете, что он является дочерним классом, выбираете столбец customerid для обоих. Теперь в классе клиентов Linq вы можете получить доступ ко всем имеющимся отчетам. Надеюсь, это поможет.

0 голосов
/ 13 ноября 2009

Все сущности, созданные конструктором Linq to Sql (скомпилированные файлы DBML), являются частичными классами. Таким образом, вы можете легко добавить новый класс в ваше решение под названием «Клиенты», например так:

public partial class Customer
{
}

, в котором вы можете разместить пару общедоступных объектов

public partial class Customer
{
    public Report Previous {get { /*...*/ } }
    public Report Next {get { /*...*/ } }
}

Однако я бы посоветовал против этого дизайна. Я бы пошел с тем, кто итерирует отчеты, чтобы управлять тем, какой отчет следующий, а какой предыдущий. Другим лучшим вариантом было бы, чтобы Заказчик возвратил двусторонний перечислитель (мой мозг подводит меня, или я бы дал правильное имя для шаблона и ссылки), который вы могли бы использовать для Следующего или Предыдущего в коллекции. *

Если вы все еще хотите это сделать, вы можете использовать Skip () и Take () для управления текущей позицией в коллекции сущностей Reports.

private int _skip = 0;

// in Previous { get {
_skip--;
if(_skip < 0) _skip = 0;
return this.Reports.Skip(_skip).Take(1).FirstOrDefault();

// in Next { get { (not optimized)
_skip++;
if(_skip >= this.Reports.Count()) _skip--;
return this.Reports.Skip(_skip).Take(1).FirstOrDefault();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...