LINQ 返回条件对象

发布于 2024-11-01 03:20:47 字数 756 浏览 0 评论 0原文

我有一个简单的 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 元素,如果“Contains”为 true,我希望返回该元素。所以基本上,我希望我的 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 语句中完成吗?

I have a simple LINQ statement that returns a list of objects based on querying an Xml file.

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

Each Xml record also has an ID2 element that I want to return if "Contains" is true. So basically, I want my Location object to be conditional based on what the IdList Contains returns (it could be ID1 or ID2). Something like:

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};}

Can this be done in a single LINQ statement?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

阳光下的泡沫是彩色的 2024-11-08 03:20:47
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 条件

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)
                                   }; 

If you need the location to contain either ID1 or ID2 just add a where condition

苦妄 2024-11-08 03:20:47

试试这个:

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 对象)。

Try this:

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 };

This should work as long as for each element in xdoc.Descendants("RECORD"), IdList contains either s.Element("ID1").Value or s.Element("ID2").Value but not both (otherwise you will get two Location objects for that particular record).

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文