【问题标题】:LINQ Returns Conditional ObjectLINQ 返回条件对象
【发布时间】:2011-04-14 23:15:21
【问题描述】:

我有一个简单的 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
                                   }; 

如果“包含”为真,每个 Xml 记录还有一个我想要返回的 ID2 元素。所以基本上,我希望我的 Location 对象是有条件的,基于 IdList 包含的返回值(它可以是 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 语句中完成吗?

【问题讨论】:

    标签: c# .net linq


    【解决方案1】:
    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 条件

    【讨论】:

    • 感谢您的回答。我继续使用两个 LINQ 语句,然后合并结果。我的对象包含很多项目,所以三元语句变得非常冗长。
    【解决方案2】:

    请参考:If Else in LINQ

    【讨论】:

      【解决方案3】:

      试试这个:

      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 对象),这应该可以工作。

      【讨论】:

        猜你喜欢
        • 2016-05-03
        • 1970-01-01
        • 2023-03-24
        • 2015-11-15
        • 2021-07-21
        • 2020-08-23
        • 2020-04-28
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多