2010-05-11 4 views
0

У меня есть две таблицы, которые я пытаюсь создать связь между ними, поэтому я могу написать интересные запросы LINQ, которые не требуют соединения.Настройка связей SQL для запросов LINQ

Widgets 
WidgetId 
WidgetDescription 

Orders 
OrderId 
WidgetId 
OrderDate 

То, что я хочу быть в состоянии сделать, это создать запрос LINQ, что делает что-то похожее на:

var result = from x in db.Widgets 
Where x.Orders.OrderDate == "5/11/2010" 
select x; 

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

ответ

0

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

Я бы сделал что-то вроде этого.

var firstQuery = (for w in Widgets 
        join o in Orders 
        on w.WidgetId equals o.WidgetID 
        select new {Widgets = w, OrderDate = o.OrderDate}).Distinct(); 

var secondQuery = for record in firstQuery 
        where record.OrderDate == "5/11/2010" 
        select record.Widgets; 

Таким образом, вы получаете OrderDate для каждой записи Widget.

+0

Поскольку эти две таблицы связаны по WidgetId, что добавление OrderDate в Widgets лишними? Я рассматриваю такие примеры: (http://weblogs.asp.net/scottgu/archive/2007/06/29/linq-to-sql-part-3-querying-our-database.aspx) и чувствую как все одно и то же, но я не могу заставить его работать. – sooprise

+0

Я разложил его на два вопроса, чтобы показать вам, что он делает. Но вы можете сделать все это в одном запросе на соединение. Вы только что заявили, что хотите сделать это без участия, я показывал, как вы могли бы создать быстрый Enumerable, который даст вам возможность сделать именно это. – jsmith

0

Как о чем-то вроде:

var result = from widgetId in 
       (from order in orderContext.Orders 
        where order.OrderDate == new DateTime(2010, 5, 11) 
        select order.WidgetId) 
      from widget in widgetContext.Widgets 
      where widget.WidgetId = widgetId 
      select widget; 
Смежные вопросы