我的应用程序允许用户上传XML文件,我将其作为XDocument传递到我的方法中。所有值都是属性字符串,我使用Linq到XML和Linq到SQL。
dateCutoff 查询应该从SQL表中获取最新日期 - InsDate 可以为空。
检查 XML查询中的 where 子句应该在 dateCutoff之后获取 inspection_date 属性值的检查元素价值。我正在使用DateTime.Parse和Date.CompareTo,但是我的空白了。
我错过了什么?非常感谢任何帮助。
public IEnumerable<XElement> getInspections(XDocument xDoc)
{
IEnumerable<XElement> inspections = null;
using (InspectionDataContext db = new InspectionDataContext())
{
// get the latest date already in Inspections table
DateTime? dateCutoff = (from d in db.Inspections
select d.InsDate).Max();
if (dateCutoff.HasValue)
{
dateCutoff = dateCutoff.Value.Date;
}
// get only the inspections later than the dateCutoff
inspections = from i in xDoc.Descendants("inspections")
where DateTime.Parse(i.Element("inspection").Attribute("inspection_date").Value).Date.CompareTo(dateCutoff) == 1
select i;
}
return inspections;
}
答案 0 :(得分:0)
我在这里做了一些假设因为它写得不完全清楚。 1.您想要返回“检查”元素(而不是“检查”容器元素)。 2.您只想返回日期大于截止值的元素 3.如果截止值为空,则需要返回所有检查。
在这种情况下,你会做这样的事情:
var inspections = xDoc.Descendents("inspection");
if (!dateCutoff.HasValue)
return inspections;
return inspections.Where(i => (DateTime)i.Attribute("inspection_date") > dateCutoff.Value )
答案 1 :(得分:0)
这是有效的:
DateTime? dateCutoff;
using (InspectionDataContext db = new InspectionDataContext())
{
// get the latest date already in Inspections table
DateTime? dateCutoffQ = (from d in db.Inspections
select d.InsDate).Max();
if (dateCutoffQ.HasValue)
{
dateCutoff = dateCutoffQ.Value.Date;
}
else
{
dateCutoff = DateTime.Now.AddYears(-20).Date;
}
string date1 = dateCutoff.ToString();
// get only the inspections later than the dateCutoff
inspectionList = from i in xDoc.Descendants("inspection")
where DateTime.Parse(i.Attribute("inspection_date").Value).Date > dateCutoff
select i;