2011-04-14 89 views
2

我有一个简单的LINQ语句,它返回基于查询Xml文件的对象列表。LINQ返回条件对象

 var locations = from s in xdoc.Descendants("RECORD") 
         where IdList.Contains(s.Element("ID1").Value) 
         select new Location 
            { 
             Id = s.Element("ID1").Value 
            }; 

每个Xml记录还有一个ID2元素,如果“Contains”为true,我想返回该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语句中完成吗?

回答

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条件

+0

感谢您的回答。我继续前进,只是使用了两条LINQ语句,然后合并了结果。我的对象包含了很多项目,所以三元语句非常冗长。 – kittyhawk 2011-04-14 20:48:13

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").Values.Element("ID2").Value,但不包括两个(otherwi如果您将获得该特定记录的两个Location对象)。