Для простого решения, которое не требует переопределения операторов:
Сначала определите правила игры:
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
Если Вы не возражаете против ссылки на контекст данных, поскольку Вы говорите, что не делаете, Вы могли записать хранимую процедуру, которая возвращает несколько результатов, которые отображаются на Ваши объекты. Читайте больше об этом здесь.
Я нашел следующий пример 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, действительно ли это - техника, к которой Вы обращались?
Блог 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
})
});
Дочерние объекты будут загружены при первом доступе к ним таким образом, можно вынудить Linq к Sql загрузить их путем доступа к ним... :-) Но я не думаю, об именно это Вы думали.
Какова Ваша ситуация? Вам хранили дочерние объекты в той же таблице как родительский объект и хотели выбрать их всех использование одного запроса?
Если Вашим набором является EntitySet затем, можно загрузить его.Load () метод:
Person p = ctx.Persons.First();
p.Addresses.Load();
Что относительно соединений? Например:
from a in Albums join o in Users on a.Owner equals o select new {a, o}
Использование включает...
var q = от u в контексте. Пользователи. Включайте ("обращаются")...
Заставил бы дочерний объект адреса быть заполненным также.