簡體   English   中英

將Linq表達式轉換為C#EF

[英]Converting Linq Expression to C# EF

我到這兩天了。 我不太擅長使用Linq表達式,因此請原諒簡單性。 我有兩個相關的表,在TSQL中編寫聯接很容易,但是我使用的是Entity Framework和Linq。

我通過閱讀文章和教程在LINQPad中破解了一個查詢,最終它返回了我想要的結果。

現在,我需要幫助將其轉換為C#代碼。 我在Google的翻譯器網站上找到了很多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 })

})

我習慣將SIMPLE Linq表達式編寫為這樣的實體框架:

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

如您所見,我返回了主記錄,但無法正確獲得聯接。

我需要幫助的是將代碼從LINQPad轉換為C#/ EF / LINQ到SQL .... ????

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

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();

因此,我在這里將其發布給其他任何人。 這不是我的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;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM