Linq к Sql - загрузка дочерних объектов без Использования DataLoadOptions?

Для простого решения, которое не требует переопределения операторов:

Сначала определите правила игры:

rules = ['paper>rock', 'rock>scissors', 'scissors>paper']

и используйте функцию, подобную этой, чтобы сравнить данные с правила:

def greater(opt1, opt2):
    if opt1 == opt2:
        return None # draw
    return "{0}>{1}".format(opt1, opt2) in rules

>>> greater('paper','rock')
True
>>> greater('paper','scissors')
False
>>> greater('rock','paper')
False
6
задан user24358 26 October 2008 в 21:29
поделиться

7 ответов

Если Вы не возражаете против ссылки на контекст данных, поскольку Вы говорите, что не делаете, Вы могли записать хранимую процедуру, которая возвращает несколько результатов, которые отображаются на Ваши объекты. Читайте больше об этом здесь.

3
ответ дан 17 December 2019 в 07:10
поделиться

Я нашел следующий пример vb.net, который вручную заполняет дочерние объекты от типа IMultipleResults:

   Public Function GetSubjectsWithBooks() As List(Of Subject)
        Dim results As IMultipleResults = Me.GetSubjectAndBooks
        Dim Subjects = results.GetResult(Of Subject).ToList
        Dim Books = results.GetResult(Of Book).ToList
        For Each s In Subjects
            Dim thisId As Guid = s.ID
            s.FetchedBooks = (From b In Books Where b.SubjectId = thisId).ToList
        Next
        Return Subjects
    End Function

Это было взято из демонстрационного проекта, записанного Jim Wooley (одна из Ссылки в авторах Действия), который может быть найден at:http://www.thinqlinq.com/Downloads/LinqToSqlBeyondTheBasics.zip

Omer, действительно ли это - техника, к которой Вы обращались?

1
ответ дан 17 December 2019 в 07:10
поделиться

Блог Rob Conery имеет способ сделать использование класса помощника, который он имеет, LazyList<T>. Также он использует пользовательские объекты для предотвращения соединения анонимная проблема типа. Я использовал это успешно для получения отношений отцов и детей от sql без DataLoadOptions.

Я думаю, что он покрывает его или в Pt2 или в Pt3 его видео Витрины MVC:

http://www.asp.net/learn/mvc-videos/video-351.aspx

http://www.asp.net/learn/mvc-videos/video-352.aspx

Это предполагает, что Вы постепенно назвали Категорию (не linq объект) и класс LazyList:

var categories = (from c in _db.Categories
                  select new Category
                  {
                  CategoryID = c.CategoryID,
                  CategoryName = c.CategoryName,
                  ParentCategoryID = c.ParentCategoryID,
                  SubCategories = new LazyList<Category>(
                       from sc in _db.Categories
                       where sc.ParentCategoryID == c.CategoryID
                       select new Category
                       {
                            CategoryID = sc.CategoryID,
                            CategoryName = sc.CategoryName,
                            ParentCategoryID = sc.ParentCategoryID
                        })
                    });
1
ответ дан 17 December 2019 в 07:10
поделиться

Дочерние объекты будут загружены при первом доступе к ним таким образом, можно вынудить Linq к Sql загрузить их путем доступа к ним... :-) Но я не думаю, об именно это Вы думали.

Какова Ваша ситуация? Вам хранили дочерние объекты в той же таблице как родительский объект и хотели выбрать их всех использование одного запроса?

0
ответ дан 17 December 2019 в 07:10
поделиться

Если Вашим набором является EntitySet затем, можно загрузить его.Load () метод:

Person p = ctx.Persons.First();
p.Addresses.Load();
0
ответ дан 17 December 2019 в 07:10
поделиться

Что относительно соединений? Например:

from a in Albums join  o in Users on a.Owner equals o select new {a, o}
0
ответ дан 17 December 2019 в 07:10
поделиться

Использование включает...

var q = от u в контексте. Пользователи. Включайте ("обращаются")...

Заставил бы дочерний объект адреса быть заполненным также.

-1
ответ дан 17 December 2019 в 07:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: