C# 带DTO的LINQ错误
我看到一个奇怪的问题,我想我遗漏了什么。返回时DTO似乎没有填充。只有在LINQ查询中被初始化的属性得到设置,而在ParseJobResultsXml中被设置的属性没有得到调试输出中看到的设置 正在LINQ查询中设置DTO,如下所示: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
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);
}