2015-11-18 168 views
1

我已經在這兩天了。我對Linq表達不太擅長,所以請原諒簡單。我有兩個相關的表,並且使用TSQL編寫聯接會很容易,但我正在使用Entity Framework和Linq。將Linq表達式轉換爲C#EF

我砍死了在LINQPad查詢(通過閱讀文章和教程),並且將結果返回,因爲我想最後。

現在我需要幫助轉向到這一點的C#代碼。我有谷歌翻譯網站,並找到大量的SQL Linq但沒有爲我在做什麼....很可能是因爲我甚至不知道我使用正確的搜索條件。

我的LINQPad代碼是這樣的:

DashboardNavigations 
.OrderBy(x => x.Id) 
.Select(x => new 
{ 
    x.Id, 
    x.Name, 
    x.Description, 
    x.ImageUrl, 
    SubDash = SubDashNavs 
     .Where(s => s.DashId == x.Id) 
     .Select(y => new { y.Id, y.Name, y.Description }) 

}) 

我習慣了編寫簡單的LINQ表達式到實體框架是這樣的:

var query = _mlsDashboardNavRepository.Table; 
query = query.OrderBy(c => c.Id); 
var dashnav = query.ToList(); 

正如你可以看到我有返回主記錄,但不能獲得加入權。

什麼,我需要用從LINQPad翻譯代碼到C#/ EF/LINQ to SQL的....幫助????

+0

包括你如何在SQL中編寫它,我會告訴你它的Linq。 – Seabizkit

+0

我認爲問題是您需要som上下文,您可以在其中訪問DashboardNavigations和SubDashNavs。糾正我,如果我錯了,但'_mlsDashboardNavRepository.Table'似乎是隻引用DashboardNavigations的上下文。 – NLindbom

+0

使用LINQ to SQL和正確的上下文(數據庫不是表格),您應該能夠像在LINQPad中一樣編寫查詢。 – NLindbom

回答

1

正如評論中所述,我建議您_mlsDashboardNavRepository僅指DashboardNavigations,因爲您說您只使用_mlsDashboardNavRepository.Tables檢索主要記錄;您的DashboardNavigations參考在哪裏?要執行查詢,您需要一個引用(所有)數據庫表的上下文。以下是LINQ格式的代碼,使用a數據庫上下文,如果您習慣使用SQL語法,則可能會更容易。

var query = (from d in context.DashboardNavigations 
      join s in context.SubDashNavs on d.Id equals s.Id 
      orderby d.Id ascending 
      select new 
      { 
       d.Id, 
       d.Name, 
       d.Description, 
       d.ImageUrl, 
       SubDash = s 
      }); 

var dashNavs = query.ToList(); 
+0

是的,你是對的。我比以前更加努力了。這在LINQPad中寫的非常直。 – GPGVM

0

所以我在這裏發佈這裏給其他人。這不是我的OP的一部分,NLindbom有OP的答案,所以他得到了信譽。然而,在將我的查詢理清後,我想對它進行投影。

我的模型類,基本上是這樣的:

public class DashboardNavigation() 
{ 
    public int Id {get; set;} 
    public string Name {get; set;} 
    .....etc..... 
    public List<SubNav> SubDashNav {get; set;} 
} 

public class SubNav() 
{ 
    ....properties.... 
} 

這LINQ項目記錄到正確的對象。

  var query = _mlsDashboardNavRepository.Table 
     .OrderBy(x => x.Id) 
     .Select(x => new 
     { 
      Id = x.Id, 
      Name = x.Name, 
      Description = x.Description, 
      ImageUrl = x.ImageUrl, 
      SubDashNav = _mlsSubDashNav.Table 
       .Where(s => s.DashId == x.Id) 

     }).ToList().Select(q => new MLS_DashboardNavigation() 
          { 
           Id = q.Id, 
           Name = q.Name, 
           Description = q.Description, 
           ImageUrl = q.ImageUrl, 
           SubDashNav = q.SubDashNav.ToList() 
          }).ToList(); 

     return query;