2010-05-11 105 views
0

我有兩個表,我試圖創建一個關係,所以我可以編寫不需要連接的很好的LINQ查詢。爲LINQ查詢設置SQL關係

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

我不認爲這可以在數據庫中的Widgets中添加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; 

這樣,您將獲得每個Widget記錄的OrderDate

+0

因爲這兩個表由相關爲widgetid,將增加訂購日期窗口小部件是多餘的?我正在看這樣的例子:(http://weblogs.asp.net/scottgu/archive/2007/06/29/linq-to-sql-part-3-querying-our-database.aspx)和感覺像一切都是一樣的,但我無法讓它工作。 – sooprise 2010-05-11 14:53:15

+0

我把它分解成兩個查詢來向你展示它在做什麼。但是你可以在一個連接查詢中完成所有操作。你剛纔說過你想在沒有加入的情況下做到這一點,我正在向你展示如何創建一個快速的Enumerable,讓你有能力做到這一點。 – jsmith 2010-05-11 14:56:10

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;