2010-11-05 6 views
0

< < запутанных >>Есть ли способ сделать это с помощью запроса LINQ?

В моем хранилище я объявляю IQueryable<Foo> foos и ConfigEntities db = new ConfigEntities() я тогда запроса БД с запросом LinQ

foos = from f in _db.Foos 
     select f; 

Каждый Foo имеет индивидуальный набор EntityCollection<Bar> bars, который автоматически заполняется по Entity Фреймворк.

Я хочу итерацию по коллекции FOOS и над коллекциями баров в каждом Foo, а также изменять коллекцию баров на основе даты, что-то вроде:

from foo in foos 
    (from bar in foo.bars 
     where bar.Date < someDate && bar.Date >= someOtherDate 
     select bar) 
    select foo 

Так я вернусь все из foos с подмножество оригинальных баров. Я не уверен, как, но я думаю, что хочу сделать выбор в рамках выбора или что-то в этом роде.

Любая помощь будет оценена по достоинству.

+0

Хм, это кажется немного противоречивым для меня: как записи в коллекции, существовавшие в течение определенного времени, имеют запись со значением 'DateTime.Now'? Разве вы не хотите выбирать записи, которые имеют значение своего свойства 'Date' в определенном диапазоне? Я (mis) понял, что вы просто хотите установить свойство 'Date' в' DateTime.Now', не так ли? –

+0

Мои извинения - использование 'DateTime.Now' было строго для иллюстративных целей. На самом деле, я действительно проверяю дату в определенном диапазоне. Я отредактирую, чтобы отразить то же самое. –

ответ

3
from foo in foos 
from bar in foo.bars 
where bar.Date == DateTime.Now 
select new { foo, bar } 

или (отредактирован, учитывая, что вы не имеете соответствующий конструктор для Foo)

from foo in foos 
select new 
{ 
    Foo = foo, 
    Bars = from bar in foo.bars 
     where bar.Date == DateTime.Now 
     select bar 
} 

Это даст сборник «кортежей», где каждый из них будет содержать оригинальную Foo (со всеми Bar), а также коллекцию нужного вам Bar.

+0

для вашего первого примера - wont ', который создает новые объекты foo и bar каждый раз, когда есть foo с соответствующей панелью? т.е. foo1 имеет массив баров = bar1, bar2, bar3, который соответствует предложению 'where' - не возвращает Ex1 fooA и BarA, fooB и BarB, FooC и BarC? Мне кажется, что * каждый раз, когда бар подходит, он создает новый foo, а также –

+0

похоже, что вы, вероятно, на чем-то с примером2 - я обязательно проверю это в понедельник! –

+0

@ScottSEA: Нет, первый запрос не создает никаких Foos или Bars, он возвращает каждый соответствующий Bar вместе с соответствующим Foo. – svick

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