0

データベース(SQLサーバー)にマップされておらず、レポートの生成にのみ使用されるモジュールがあります。

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) を入力Reportしますが、Report の一部のプロパティは null のままです ( as OutTime is null)

var query = .....;

今、クエリのアイテム(タイプReport)を繰り返し、nullプロパティの値を次のように設定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

2 に答える 2

1

クエリ結果を反復処理する前に、ローカルに保存します。

 var query = ....ToList();

あなたのケースでは、クエリが2回実行されたように見えます.1回目はOutTimeプロパティを更新しているとき、2回目はクエリ項目を反復しているとき(デバッガで見るか、UIに表示するか)です。そのため、クエリを 2 回目に実行すると、まったく新しいオブジェクトのセットがクエリ結果として表示されます (元のnull値は ですOutTime)。

ところで、メインクエリの各アイテムに対して個別のアウトタイムクエリを作成する代わりに、単一の JOIN クエリを使用することを検討してください。

于 2013-10-03T07:03:15.250 に答える