0

我有一个嵌套的类层次结构

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace Models
{
public class Document
{
public Document();
public Guid ID { get; set; }
public List<Order> Orders {get; set;}
}
public class Order
{
public Order();
public Guid ID { get; set; }
public List<OrderItem> OrderItems {get; set;}
}
public class OrderItem
{
public OrderItem();
public Guid ID { get; set; }
public String ProductName { get; set; }
public int Qty { get; set; }
}
} 

ID 是 GUID。我需要一般地搜索具有指定 GUID 的对象。我被告知一种方法是为此类指定一个接口(请参阅:SO Question)。但是,由于我的类是生成的,我宁愿不改变类。所以我想研究一种使用 LINQ to Objects 的方法。我还发现了关于这种方法的优秀 SO 帖子:LINQ to Objects SO post,但当然需要在查询中指定所有子类。

乐观地说,我希望“让我得到 GUID 为 x 的对象”。GUID 是独一无二的,所以我觉得我不需要指定路径。但是我想这对于 LINQ 是不可能的???

编辑:更新了上面的代码。道歉。我想提取一个带有 GUID= X 的 OrderItem

4

2 回答 2

1

对于修改后的问题,在文档列表中搜索所有匹配OrderItem对象的代码如下所示:

List<Document> data = ...;
Guid guidToSearch = ...;
var orderItems = data.SelectMany(o => o.Orders)
                     .SelectMany(o => o.OrderItems)
                     .Where(o => o.ID == guidToSearch)
                     .ToList();

如果您只有一个文档,而不是列表,则可以跳过第一个SelectMany调用。

于 2012-12-05T16:10:30.323 回答
0

假设您有一组不同的对象,如下所示:

List<object> data = new List<object>() { new Order { ID = ... }, new Document { ID = ... } };

然后你可以写这样的代码

var guidToSearch = ...;
var results = data.Where<dynamic>(o => o.ID == guidToSearch).ToList();

threresults集合现在将包含匹配的对象。

于 2012-12-05T16:07:57.353 回答