DTO的LINQ错误

时间:2010-12-13 01:38:05

标签: c# silverlight linq

我看到一个奇怪的问题,我想我错过了一些东西。返回时DTO似乎没有填充。只有在LINQ查询中设置init的属性才会被设置,在ParseJobResultsXml中设置的属性不会在DEBUG输出中看到设置。

正在LINQ查询中设置DTO,如下所示:

public class JobResultDTO
{
 [Key]
 public string Id { get; set; }
 public string Created { get; set; }
 public string Finished { get; set; }
 public string Status { get; set; }
 public string PlantLink { get; set; }
 public IEnumerable<string> Messages { get; set; }
 public string JobType { get; set; }
}
    private void ParseJobResultXml(string jobResultXml, JobResultDTO jobDto)
{
 try
 {
  var xmlElement = XElement.Parse(jobResultXml);
  if (xmlElement != null)
  {
   jobDto.Finished = xmlElement.Element("Date").Value;
   jobDto.Status = xmlElement.Element("Status").Value;
   jobDto.PlantLink = xmlElement.Element("PlantLink").Value;
   jobDto.Messages = xmlElement.Element("Messages").Elements("Message").Select(m => m.Value);
  }
 }
 catch { }
}


    var jobsAndResults = _context.Jobs.Where(j => j.JobType == jobOpenPlant || j.JobType == jobNormSite)
 .AsEnumerable()
 .Where(j => JobResultXmlHelper.JobBelongsToUser(j.JobResult, userLogin))
 .OrderByDescending(j => j.JobCreated)
 .Select(j => new
 {
  Result = j.JobResult,
  Dto = new JobResultDTO
  {
   Id = j.Id.ToString(),
   JobType = j.JobType,
   Created = (j.JobCreated ?? DateTime.Now).ToString()
  }
 });
foreach (var j in jobsAndResults)
{
 ParseJobResultXml(j.Result, j.Dto);
 DumpDTO(j.Dto); //I see it set up correctly here
}
jobs.AddRange(jobsAndResults.Select(j => j.Dto));
DumpDTO(jobs.ElementAt(0)); //Now only the Key property is set
return jobs;

这是我在服务器上看到的两个DEBUG行的调试输出

在服务器上...... Id:51a8d041-5dff-4849-9651-9fb2fe89816a状态:已完成

目录 - 已成功更新0条记录: 模型 - 已成功更新0条记录:

在服务器上...... Id:51a8d041-5dff-4849-9651-9fb2fe89816a状态:

正如您所看到的,第二个没有Status coln的条目。任何想法为什么会发生这种情况?

1 个答案:

答案 0 :(得分:0)

我认为您的代码是正确的,但您没有等待时间。

我的语法中没有看到任何LoadOperation

您的代码将在WPF中运行,但不适用于SilverLight。

* 更新: *尝试

foreach (var j in jobsAndResults)
{
 ParseJobResultXml(j.Result, j.Dto);
 DumpDTO(j.Dto); //I see it set up correctly here
jobs.Add(j.Dto);
}