2017-03-01 75 views
-2

我有一個LINQ查詢:如何繼續使用LINQ查詢

var list = (from x in db.students 
         where x.name== student_name 
         select new 
         { 
          x.date, 
          x.Student_id 
         } 

我不想執行.toList()查詢,只是還沒有,我想在稍後階段選擇一個學生的更多屬性,例如:

x.student_age 
x.student_name 

在稍後階段。

例如,添加到VAR列表:

var list = (from x in db.students 
         where x.name== student_name 
         select new 
         { 
          x.date, 
          x.Student_id 
          x.student_age 
          x.student_name 
         }.toList(); 

我應該如何去這樣做呢?

+2

無法理解你的問題。請重新說明它以獲得更多的可理解性。 –

+1

您應該定義**希望在稍後階段選擇更多**。 –

+0

'.toList()'會顯示所有字段。你想要選擇你想要的領域嗎? – vanloc

回答

5

您正在以錯誤的方式處理問題。如果你不知道,你想選擇一個對象的屬性,爲什麼你會選擇一個子集呢?

var list = (from x in db.students 
      where x.name== student_name 
      select x); 

此時,您尚未實現您的查詢。它仍然是一個IQueryable<T>。 現在,當你知道你需要哪些屬性,你仍然可以做一個選擇到一個匿名對象,或preferrably一個ViewModel類:

list = list.Select(x => new StudentViewModel { 
    Id = x.Id, 
    Name = x.Name, 
    /* ....*/ 
}); 

如果你想要去的一個匿名對象,它僅僅是:

list = list.Select(x => new { 
    Id = x.Id, 
    Name = x.Name, 
    /* ....*/ 
}); 

現在,當您調用list.ToList()它已實現並且執行查詢時。你的IQueryable<T>變成IEnumerable<T>

+0

美麗,我會測試一下,非常感謝你! –

+1

不要忘記聲明你的ViewModel類,否則你將運行到另一個編譯時錯誤;) – Marco

0

我認爲你可以在稍後的階段做選擇查詢,如果你的查詢仍然是延遲查詢。

var list = from x in db.students 
      where x.name == student_name 

然後在下一階段:

var list1 = from x in list 
      select new 
      { 
       x.date, 
       x.student_id 
       x.student_age 
       x.student_name 
      } 
+0

這將無法編譯。查詢語法要求您有一個select語句。 – Marco

+0

對不起,我可以在第一個查詢中添加選擇x。 –