2013-10-03 3 views
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, имя, должность, Интайм) из Report и некоторые свойства отчета остается пустой (как OutTime is null)

var query = .....; 

Теперь то, что я хочу итерацию по пунктам запроса (типа Report) и установите значение для нулевых свойств 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

После того, как вы установите значение, оно не должно быть перезаписаны. Странно. :( –

ответ

1

Сохранение результатов запроса локально до итерацию над ними:

var query = ....ToList(); 

Похоже, в вашем случае запрос выполняется два раза - первый раз, когда вы обновляете OutTime собственности, и второй раз, когда вы итерация элементы запроса (либо поиск в отладчике, либо отображение в пользовательском интерфейсе). Таким образом, когда запрос выполняется второй раз, вы видите полностью новый набор объектов как результат запроса (которые имеют исходные значения nullOutTime).

BTW Рассмотрите возможность использования одного запроса JOIN вместо того, чтобы делать отдельный запрос времени для каждого элемента в основном запросе.

+0

Прежде всего, спасибо за ответ. Я пытаюсь использовать JOIN, но поскольку как InTime, так и OutTime взяты из CHECKTIME модели CHECKINOUT в зависимости от CHECKTYPE (I или O). Если CHECKTYPE - это CHECKTIME, это будет InTime, и если CHECKTYPE - O CHECKTIME будет OutTime.Я не могу проверить CHECKTYPE для I и O для одного запроса, поэтому я использую подзапрос. Есть ли другой способ сделать это. Пожалуйста, предложите мне, что у меня проблема. – link2jagann

+0

@ link2jagann ОК, я подумаю join query, но вам нужно предоставить определение 'query'. Ответ на мой вопрос решил вашу проблему? –

+0

Нет. Есть ли способ использовать список или что-то в этом роде? – link2jagann

0

Try код что-то вроде этого:

public class Report 
{ 
    public int USERID { get; set; } 
    public DateTime DateToCal { get; set; } 
    public string Name { get; set; } 
    public string Position { get; set; } 
    private TimeSpan? _intime; 
    public TimeSpan Intime { 
     get { return _intime ?? new TimeSpan(0); } 
     set { _intime = value; } 
    } 
    private TimeSpan? _outTime; 
    public TimeSpan OutTime 
    { 
     get { return _outTime ?? new TimeSpan(0); } 
     set { _outTime = value; } 
    } 
} 
+0

Тот же вопрос ничего не меняется. – link2jagann

Смежные вопросы