簡體   English   中英

LINQ 到實體框架多對多,帶有字符串列表

[英]LINQ to Entity Framework many to many with list of strings

這個問題是從以下繼續: Can't think of query that solve this many to many

用戶@juharr 向我推薦了這個 LINQ 查詢,我只是添加了字符串連接,目的是將名字和姓氏組合成全名。

var courseViews = from c in db.Courses  
                  select new CourseView()  
                  {  
                      CourseID = c.ID,  
                      ProfessorName = (from l in c.Leturers   
                                       where l.Is_Professor   
                                       select l.LastName+" "+l.FirstName).FirstOrDefault(),  
                      AssistantNames = (from l in c.Leturers   
                                        where !l.Is_Professor   
                                        select l.LastName+" "+l.FirstName)
                                        .ToList()   //hmmm problem
                  };

我使用的 ModelView 是另一個可能的問題原因:

public class CourseView
    {
        public int ID { get; set; }
        public string CourseName { get; set; }
        public string ProfessorName { get; set; }
        public List AssistantNames { get; set; }
    }

嗯助手名稱的字符串列表有問題不是嗎? 在我的愚蠢結束時,在視圖中,我使用@foreach(var s in item.AssistantNames){@s}遍歷了這個列表
@Ladislav 建議使用IQueryable而不是字符串,如何在哪里?

對於我到目前為止所做的解決方案,我收到以下錯誤

需要幫忙!

刪除ToList()調用,然后將 Assistants 屬性更改為:

public IQueryable AssistantNames { get; set; }

看看這是否有效

var courseViews = from c in db.Courses
                  let assistantsList =  (from l in c.Leturers   
                                        where !l.Is_Professor   
                                        select l.LastName+" "+l.FirstName).ToList()   
                  select new CourseView()  
                  {  
                      CourseID = c.ID,  
                      ProfessorName = (from l in c.Leturers   
                                       where l.Is_Professor   
                                       select l.LastName+" "+l.FirstName).FirstOrDefault(),  
                      AssistantNames =  assistantsList
                  };

另一種方法是,因為您無論如何都要物化所有課程,將查詢分成兩部分,第一個物化數據,第二個使用它來創建課程視圖(現在是 Linq 到對象查詢):

var courses = (from c in db.Courses 
               select new { c.ID, Leturers = c.Leturers.ToList() }).ToList();

var courseViews = from c in courses 
                  select new CourseView()  
                  {  
                      CourseID = c.ID,  
                      ProfessorName = (from l in c.Leturers   
                                       where l.Is_Professor   
                                       select l.LastName+" "+l.FirstName).FirstOrDefault(),  
                      AssistantNames = (from l in c.Leturers   
                                        where !l.Is_Professor   
                                        select l.LastName+" "+l.FirstName)
                                        .ToList()  
                  };

暫無
暫無

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

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