Linq к Объектам многие многим запрос Select

Так как в настоящее время нет SQL-клиента MS для Mac  OS  X, я, как Modesty предложил, использовал бы Удаленный рабочий стол для Mac

18
задан Peter 8 July 2009 в 14:28
поделиться

4 ответа

Это оказалось намного проще, чем казалось. Я решил проблему с помощью следующего сообщения в блоге: http: //weblogs.asp.

27
ответ дан 30 November 2019 в 07:50
поделиться
from ms in Context.MusicStyles
where ms.Bands.Any(b => b.Name.Contains(search))
select ms;

This just returns the style, which is what your question asks for. Your sample SQL, on the other hand, returns the style and the bands. For that, I'd do:

from b in Context.Bands
where b.Name.Contains(search)
group b by band.MusicStyle into g
select new {
    Style = g.Key,
    Bands = g
}

from b in Context.Bands
where b.Name.Contains(search)
select new {
    BandName = b.Name,
    MusicStyleId = b.MusicStyle.Id,
    MusicStyleName = b.MusicStyle.Name,
    // etc.
}
0
ответ дан 30 November 2019 в 07:50
поделиться

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

var bands = from ms in db.MusicStyle
            let b = ms.Bands
            where b.Name.Contains(SEARCHSTRING)
            select new {
                b.Name, ms.Name, 
                ms.ID, ms.Description};

Если вы посмотрите на сгенерированные классы сущностей, BandMusicStyle не должен отображаться, поскольку LINQ to Entities считает, что Band и MusicStyle много ко многим и эта таблица не нужна.

Посмотрим, работает ли?

4
ответ дан 30 November 2019 в 07:50
поделиться

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

Я думаю вы ищете всего несколько соединений?

var q = from b in db.Bands
join bm in db.BandMusicStyle on on b.BandId equals bm.BandId
join ms in db.MusicStyle on bm.MusicStyleId equals m.MusicStyleId
where b.Name.Contains(searchString)
select new { b.Name, ms.ID, ms.Name, ms.Description };

или что-то в этом роде

1
ответ дан 30 November 2019 в 07:50
поделиться
Другие вопросы по тегам:

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