2016-11-16 55 views
0

在LINQ lambda表達式上尋求幫助。我需要從兩個連接的表中選擇數據。 SQL查詢是這樣的:在LINQ lambda表達式上尋求幫助

declare @formName 

select T1.Title, T1.Text, T2.Name, T1.Active, T1.ConfirmationText, T1.URL 
From T1 join T2 on T2.FormCodeID = T1.FormCodeID 
Where T1.Active =1 and T2.Name = @formName 

隨着我的情況,我必須使用LINQ lambda表達式,但得到的代碼錯誤:

public IEnumerable<UModel.Form> GetForms(string formName) 
    { 
     IEnumerable<UModel.Form> form = null; 

     using (var context = new UASContext()) 
     { 
      form = context.Forms.Join(context.FormCode, f => f.FormCodeID, fc => fc.FormCodeID, 
       (f, fc) => new { Active = f.Active, FormName = fc.FormName}) 
       .Where(f => (f.Active == true)) 
       .Where (fc => (fc.FormName ==formName)).ToList(); 
     } 

     return form; 
} 

任何幫助或建議將不勝感激。

+2

我們不會做你的編譯器已經做的工作​​。發佈錯誤。解釋你對此不瞭解的內容。發佈你試圖修復它。 – nvoigt

回答

0

你的LINQ看起來確定。但你似乎期望它產生一個Form對象列表。你的SQL語句不是而是返回一個T1的記錄集,你的LINQ不會。

你的代碼看起來不錯,你的期望是錯誤的。我們無法解決這個問題。您的SELECT不返回T1行,您的LINQ將不會返回表單。

如果你想這樣做,你必須記住加盟的形式時:

form = context.Forms.Join(context.FormCode, f => f.FormCodeID, fc => fc.FormCodeID, 
      (f, fc) => new { Form = f, Active = f.Active, FormName = fc.FormName}) 
      .Where(temp => (temp.Active && temp.FormName == formName)) 
      .Select(temp => temp.Form).ToList(); 

但是,這是不是 SQL的等價物。

+0

謝謝您的幫助。 – SCD

1

您可以嘗試

form = context.Forms.Join(context.FormCode, f => f.FormCodeID, fc => fc.FormCodeID, 
       (f, fc) => new { Active = f.Active, FormName = fc.FormName}) 
       .Where(f => f.Active == true && f.FormName==formName).ToList(); 

更新

form = context.Forms.Join(context.FormCode, f => f.FormCodeID, fc => fc.FormCodeID, 
        (f, fc) => new { Form = f, FormCode= fc}) 
        .Where(f => f.Form.Active == true && f.FormCode.FormName==formName) 
        .Select(x=>x.Form) 
        .ToList(); 
+0

這個修復程序到底是什麼? – nvoigt

+0

@ Eldeniz,這是從where子句刪除f.FormCode.FormName == formName後的工作。我改變了表格,所以不需要在這裏傳遞formName。非常感謝你! – SCD

+0

歡迎您 – Eldeniz

0

我推薦一個LINQ查詢,在某些情況下,它更清晰:

public IEnumerable<UModel.Form> GetForms(string formName) 
{ 
    using (var context = new UASContext()) 
    { 
     var query = from form in context.Forms 
      join formCode in context.FormCode on form.FormCodeID equals formCode.FormCodeID 
      where form.Active == true and formCode.FormName == formName 
      select form; 

     return query.ToList(); 
    } 
} 
0

我認爲與LINQ查詢問題是,您從方法返回IEnumerable<UModel.Form>並選擇new { Active = f.Active, FormName = fc.FormName}即匿名對象。你應該選擇並返回一個Form實體的集合。

您可以更改您的查詢選擇形式如下:

form = context.Forms.Join(context.FormCode, f => f.FormCodeID, fc => fc.FormCodeID, (f, fc) => new { Form = f, FormName = fc.FormName }).Where(x => (x.Form.Active && x.FormName == formName)).Select(x => x.Form); 
+0

謝謝。這段代碼也有幫助。 – SCD