0

我有模塊沒有映射到數據庫並用於生成報告。爲實體設置的值

public class Report 
{ 
    public int USERID { get; set; } 
    public DateTime DateToCal { get; set; } 
    public string Name { get; set; } 
    public string Position { get; set; } 
    public TimeSpan? Intime { get; set; } 
    public TimeSpan? OutTime { get; set; } 
} 

我生成一個查詢,並填寫報告的一些屬性(用戶標識,DateToCal,姓名,職務,銀泰)和剩餘財產OutTime爲空。

var query = .....; 

現在,我要的是查詢的foreach項(報告類型)爲OutTime作爲

foreach(var items in query) 
      { 
       var outtime= from x in con.CHECKINOUTs 
           where x.USERID == items.USERID && EntityFunctions.TruncateTime(x.CHECKTIME) == EntityFunctions.TruncateTime(items.DateToCal && x.CHECKTYPE == "O" 
           select x.CHECKTIME 
           .Single(); 
       items.OutTime= outtime.TimeOfDay; 
      } 

現在的問題是,在mousehover到items.OutTime用的foreach似乎有值,但如果我設定值從foreach和mousehover退出到query仍然有OutTime is null。沒有出現我設定的價值。這是可能的,以這種方式來設置實體的價值。或者我的問題是什麼?

謝謝。

回答

0

問題是「items」只在foreach循環中可用,並在每次迭代結束時被丟棄。如果你想堅持的價值,你可以使用一個for循環,而不是直接設置在枚舉「查詢」的項目:

for(int index = 0; index < query.Length; ++index;) 
      { 
       var outtime= from x in con.CHECKINOUTs 
           where x.USERID == items.USERID &&   
           EntityFunctions.TruncateTime(x.CHECKTIME) == 
           EntityFunctions.TruncateTime(items.DateToCal && x.CHECKTYPE == "O" 
           select x.CHECKTIME 
           .Single(); 
       query[index].OutTime= outtime.TimeOfDay; 
      } 
+0

我試過這個,但是'query [index]'說出現錯誤''不能用[]對'System.Linq.IQueryable '類型的表達式應用索引' – link2jagann

+0

什麼是變量查詢? – user489998

0

嘗試先用方法一()來執行你的LINQ查詢:

foreach(var items in query) 
      { 

       var outtime= (from x in con.CHECKINOUTs 
           where x.USERID == items.USERID && 
           EntityFunctions.TruncateTime(x.CHECKTIME) 
           == EntityFunctions.TruncateTime(items.DateToCal && x.CHECKTYPE == "O" 
           select x.CHECKTIME).First(); 

       items.OutTime = outtime.TimeOfDay; 
      } 
+0

@ andrey-gubal,我嘗試使用.First()也會發生同樣的問題。 – link2jagann

0

請看這topic這是因爲foreach是爲了迭代一個容器,確保每個項目訪問一個,而不更改容器,以避免討厭的副作用。