2013-04-08 3 views
2

будучи новым для LINQ и Entity Framework этого вида головоломок мне:Выберите суб-подпункты объекта

Я создал модель (крошечную секции) в моей базе данных через Entity Framework, с тремя таблицами два прямо вниз-: п отношения: папки -> 1: п ->Договор -> 1: п -> "Измерение" точки

Ищу синтаксис, что позволяет начать объект папки I итерации и возвращаю точку (если она существует) в строку, которую я нашел в файле, сравнивая по имени. Я хочу полностью игнорировать контракт на уровне среднего уровня, просто найдите на одном уровне ниже уровень всех контрактов.

Я могу это сделать, перебором каждого контракта, как это:

foreach (Contract contract in folder.Contract) 
{ 
    Point point = contract.Point.SingleOrDefault(p => p.Pointname == pointname); 
    if (point != null) 
    { ... other code 
    } 
} 

Я хотел бы пропустить Еогеасп по контракту, но я не могу получить правильный синтаксис. Я пробовал:

Point point = folder.contract.SelectMany("???").Point.SingleOrDefault(p => p.Pointname == pointname) 
Point point = folder.contract.All(c => c.Point.SingleOrDefault(p => p.Pointname == pointname)) 

Оба не могут скомпилировать, но, конечно же, это простой способ сделать это?

Спасибо!

Ralf

ответ

2

Я считаю, что вам нужно, как показано ниже код:

Point point = folder.Contract 
        .SelectMany(c => c.Point) 
        .SingleOrDefault(p => p.Pointname == pointname) 

Но кажется, что логика немного отличается от того, что вы показываете, так как вы проверить, является ли point != null в каждом контракте.

+1

Именно то, что я искал. Изменение логики не является проблемой: мне нужно только знать, нужна ли точка вообще где угодно. – Ralf

Смежные вопросы