Linq-to-sql генерирует одиночный SQL-запрос с - PullRequest
0 голосов
/ 29 сентября 2010

После оператора linq генерирует несколько поездок в базу данных, есть ли способ изменить это так, чтобы он делал это за одну поездку?

db.Members.Distinct().Select(
    m => new { 
        Id = m.Id, 
        PlayTimeSchedules = m.PlayTimeSchedules.Select(pts => pts.DayOfWeek) }
).ToList();

К вашему сведению: в этом примере Distinct избыточен.

Существует отношение один-ко-многим между участником и его PlayTimeSchedule

Я ожидаю, что будет сгенерировано что-то вроде следующего:

select distinct(Members.Id), PlayTimeSchedule.DayOfWeek from Members 
join PlayTimeSchedule on PlayTimeSchedule.MemberId = Members.Id

или я застрял при создании представления, еслиЯ хочу, чтобы это было сделано за одну поездку?

РЕДАКТИРОВАТЬ: Вот что выше генерирует linq (я добавил. Возьмите (20) для краткости):

    SELECT TOP (20) [t1].[Id]
    FROM (
        SELECT DISTINCT [t0].[Id], [t0].[EMail], [t0].[Username], [t0].[Password], [t0].[GmtOffset], [t0].[LastSeen], [t0].[Notifications], [t0].[EMailVer
    ified], [t0].[ObserveDst], [t0].[Admin], [t0].[AttendedRaidCount], [t0].[MissedRaidCount], [t0].[LedRaidCount], [t0].[CommittedRaidCount]
        FROM [dbo].[Members] AS [t0]
        ) AS [t1]
    -- Context: SqlProvider(Sql2008) Model: AttributedMetaModel Build: 3.5.30729.1

    SELECT [t0].[DayOfWeek]
    FROM [dbo].[PlayTimeSchedule] AS [t0]
    WHERE [t0].[MemberId] = @x1
    -- @x1: Input Int (Size = 0; Prec = 0; Scale = 0) [1]
    -- Context: SqlProvider(Sql2008) Model: AttributedMetaModel Build: 3.5.30729.1

    SELECT [t0].[DayOfWeek]
    FROM [dbo].[PlayTimeSchedule] AS [t0]
    WHERE [t0].[MemberId] = @x1
    -- @x1: Input Int (Size = 0; Prec = 0; Scale = 0) [2]
    -- Context: SqlProvider(Sql2008) Model: AttributedMetaModel Build: 3.5.30729.1

    +++ 18 more DayOfWeek selections as above

1 Ответ

1 голос
/ 29 сентября 2010

.Select не будет выполнять соединение (что вам нужно), используйте .Join или, если это облегчает, используйте не-лямбда-способ:

var query = (from m in db.Members
            join s in db.PlayTimeSchedules on m.Id equals s.MemberId
            select new { Id = m.Id, PlayTimeSchedules = s.DayOfWeek }).Distinct();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...