2009-10-01 3 views
1

У меня есть две таблицы. Связан с внешним ключом.LinqToSql - Включить связанный объект в выбранный результат

linked tables http://i33.tinypic.com/15znlw1.jpg

Теперь я принесу строку из таблицы поля:

IField Field = from f in DataContext.fields 
       where f.mapId == mapId && f.x1 == x && f.y1 == y 
       select f; 

Работа с этой строкой мне нужно некоторые данные из связанной таблицы fieldViews. Так что я просто сделать Somthing так:

[..] Field.FieldViews [..] 

Согласно SQL Profiler Linq To Sql генерирует следующие запросы.

SELECT 
    [t0].[fieldId], 
    [t0].[mapId], 
    [t0].[x1], 
    [t0].[y1] 
FROM 
    [dbo].[fields] AS [t0] 
WHERE 
    ([t0].[mapId] = @p0) AND 
    ([t0].[x1] = @p1) AND 
    ([t0].[y1] = @p2) 


SELECT 
    [t0].[fieldViewId], 
    [t0].[fieldId], 
    [t0].[mapUserId] 
FROM 
    [dbo].[fieldViews] AS [t0] 
WHERE 
    [t0].[fieldId] = @p0 

Но я не хочу 2 запросов. Как я могу заставить LinqToSql включить этот связанный объект в первый запрос?

ответ

3

С помощью DataLoadOptions вы можете указать, что L2S будет загружать записи FieldViews вместе с полями.

Вставить что-то вроде этого перед запросом:

var dlo = new DataLoadOptions(); 
dlo.LoadWith<Fields>(f => f.FieldViews); 
DataContext.LoadOptions = dlo; 

Сервер будет выполнять два запроса, но в пределах одного вызова к серверу.

+0

спасибо! это работает точно так, как ожидалось! – rkusa

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

  • Нет связанных вопросов^_^