我有一个简单的LINQ语句,它根据查询Xml文件返回一个对象列表。
var locations = from s in xdoc.Descendants("RECORD")
where IdList.Contains(s.Element("ID1").Value)
select new Location
{
Id = s.Element("ID1").Value
};
如果“Contains”为true,每个Xml记录还有一个我要返回的ID2元素。所以基本上,我希望我的Location对象是基于IdList Contains返回的条件(可能是ID1或ID2)。类似的东西:
if(IdList.Contains(s.element("ID1").value){ select new Location {Id = s.Element("ID1").Value};}
if(IdList.Contains(s.element("ID2").value){ select new Location {Id = s.Element("ID2").Value};}
这可以在一个LINQ语句中完成吗?
答案 0 :(得分:4)
var locations = from s in xdoc.Descendants("RECORD")
select new Location
{
Id = IdList.Contains(s.Element("ID1").Value) ?
s.Element("ID1").Value :
(IdList.Contains(s.Element("ID2").Value) ?
s.Element("ID2").Value :
DefaultValue)
};
如果您需要包含ID1或ID2的位置,只需添加where条件
答案 1 :(得分:0)
请参阅:If Else in LINQ
答案 2 :(得分:0)
试试这个:
var locations = from s in xdoc.Descendants("RECORD")
from x in IdList
where s.Element("ID1").Value == x || s.Element("ID2").Value == x
select new Location { Id = x };
只要xdoc.Descendants("RECORD")
中的每个元素都可以使用,IdList
包含s.Element("ID1").Value
或s.Element("ID2").Value
,但不包含Location
,否则您将获得两个{{1}}该特定记录的对象。)