Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/silverlight/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 带DTO的LINQ错误_C#_Silverlight_Linq - Fatal编程技术网

C# 带DTO的LINQ错误

C# 带DTO的LINQ错误,c#,silverlight,linq,C#,Silverlight,Linq,我看到一个奇怪的问题,我想我遗漏了什么。返回时DTO似乎没有填充。只有在LINQ查询中被初始化的属性得到设置,而在ParseJobResultsXml中被设置的属性没有得到调试输出中看到的设置 正在LINQ查询中设置DTO,如下所示: public class JobResultDTO { [Key] public string Id { get; set; } public string Created { get; set; } public string Finished { ge

我看到一个奇怪的问题,我想我遗漏了什么。返回时DTO似乎没有填充。只有在LINQ查询中被初始化的属性得到设置,而在ParseJobResultsXml中被设置的属性没有得到调试输出中看到的设置

正在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;
公共类JobResultTo
{
[关键]
公共字符串Id{get;set;}
已创建公共字符串{get;set;}
公共字符串已完成{get;set;}
公共字符串状态{get;set;}
公共字符串PlantLink{get;set;}
公共IEnumerable消息{get;set;}
公共字符串作业类型{get;set;}
}
私有void ParseJobResultXml(字符串jobResultXml,JobResultTo jobDto)
{
尝试
{
var xmlement=XElement.Parse(jobResultXml);
if(xmlement!=null)
{
jobDto.Finished=xmlement.Element(“日期”).Value;
jobDto.Status=xmlement.Element(“Status”).Value;
jobDto.PlantLink=xmlement.Element(“PlantLink”).Value;
jobDto.Messages=xmlement.Element(“Messages”).Elements(“Message”).Select(m=>m.Value);
}
}
捕获{}
}
var jobsAndResults=_context.Jobs.Where(j=>j.JobType==jobOpenPlant | | j.JobType==jobNormalSite)
.可计算的()
.Where(j=>JobResultXmlHelper.JobBelongsToUser(j.JobResult,userLogin))
.OrderByDescending(j=>j.JobCreated)
.选择(j=>new
{
结果=j.JobResult,
Dto=新作业结果TO
{
Id=j.Id.ToString(),
JobType=j.JobType,
Created=(j.JobCreated??DateTime.Now).ToString()
}
});
foreach(工作和结果中的var j)
{
ParseJobResultXml(j.Result,j.Dto);
DumpDTO(j.Dto);//我看到它在这里设置正确
}
AddRange(jobsAndResults.Select(j=>j.Dto));
DumpDTO(jobs.ElementAt(0))//现在只设置了Key属性
返回工作岗位;
这是我在服务器上看到的两个调试行的调试输出

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

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

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


正如您所看到的,第二个没有状态coln的条目。知道为什么会发生这种情况吗?

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

我没有看到你的语法有任何变化

您的代码将在WPF中工作,但不能在SilverLight中工作

*更新:*请尝试


不清楚你想做什么-你在更新记录吗?这是一个问题吗?你需要包括更多的细节。我添加了我的编辑,希望有意义。我在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);
}