LINQ返回条件对象

时间:2011-04-14 13:36:18

标签: c# .net linq

我有一个简单的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语句中完成吗?

3 个答案:

答案 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").Values.Element("ID2").Value,但不包含Location,否则您将获得两个{{1}}该特定记录的对象。)