2013-11-25 38 views
0

如何在使用LoadWith選項運行時查詢用於獲取子記錄的查詢SqlCommandLinq-To-Sql LoadWith命令

假設這樣一個模式(非常簡略,但要解釋這是怎麼回事):

Widget: 
    Id int not null identity(1,1) primary key 
    IsNeeded bit not null 

DooHickey 
    Id int not null identity(1,1) primary key 
    WidgetFk int not null references Widget(Id) 

翻譯到LINQ到SQL使用拖曳類和視覺工作室式界面。

例子:

using(var ctx = GetDataContext()) { 
    var dlo = new DataLoadOptions(); 
    dlo.LoadWith(widget => widget.DooHickeys); 
    ctx.LoadOptions = dlo; 
    var query = ctx.Widgets.Where(x => x.IsNeeded); 

    // The "select * from Widget where IsNeeded = 1" command 
    var mainCmd = (SqlCommand)ctx.GetComamnd(query); 

    // Want Command for getting the DoHickeys 
} 

這將使它更容易自動創建一個DataContextIQueryable SqlDependencies。也許我是這麼做的,而且有人已經解決了這個問題......我會接受一個第三方工具(NuGet可安裝),它不會引入新的依賴關係(如System.Web)。

+0

我不明白你怎麼會到達一個從LoadWith存在。 LoadWith生成一個JOIN。如果你做'query.ToString()'你會看到它。 –

+0

啊,也許我應該更清楚一點,我不知道LoadWith是如何工作的,雖然我總體理解Linq-to-Sql查詢的功能。當我'GetCommand'它不顯示連接... – Crisfole

回答

0
var query = ctx.Widgets.Where(x => x.IsNeeded); 

應該

var query = ctx.Widgets.Where(x => x.IsNeeded == 1); 
+0

我認爲這屬於一個評論.... – Crisfole

+0

此外,SqlServer中的「bit」被轉換爲布爾值。 – Crisfole

+0

@ChristopherPfohl - 我不知道IsNeeded是什麼類型,因爲你沒有在你的追求中顯示。用正確的類型進行更改並查看所需的結果。或者不要。不管對我來說。 – Hogan