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; }
}

クエリを生成し、レポートのいくつかのプロパティ (USERID、DateToCal、Name、Position、Intime) を入力し、残りのプロパティ OutTime は null です。

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;
            }

ここでの問題は、items.OutTimeforeach でマウスホバーすると値が表示されますが、 foreach から出てマウスホバーするqueryとまだOutTime is null. 私が設定した値が表示されません。このようにエンティティの値を設定することは可能ですか。または私の問題は何ですか?

ありがとうございました。

4

3 に答える 3

0

まず、メソッド First() を使用して 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;
            }
于 2013-10-02T12:20:14.613 に答える
0

このトピックを参照してください。これは、 foreach がコンテナーを反復処理することを意図しているためであり、コンテナーを変更せずに各項目が 1 つだけアクセスされるようにして、厄介な副作用を回避します。

于 2013-10-03T20:43:25.287 に答える
0

問題は、「アイテム」が 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;
            }
于 2013-10-02T11:58:06.813 に答える