Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
是否可以使用LINQ to对象(一般)在C#中的嵌套类中查找GUID为的对象?_C#_Asp.net Mvc 3_Linq To Objects - Fatal编程技术网

是否可以使用LINQ to对象(一般)在C#中的嵌套类中查找GUID为的对象?

是否可以使用LINQ to对象(一般)在C#中的嵌套类中查找GUID为的对象?,c#,asp.net-mvc-3,linq-to-objects,C#,Asp.net Mvc 3,Linq To Objects,我有一个嵌套的类层次结构 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 O

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

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; }
}
} 
使用系统;
使用System.Collections.Generic;
使用System.Linq;
使用System.Web;
名称空间模型
{
公共类文档
{
公共文件();
公共Guid ID{get;set;}
公共列表顺序{get;set;}
}
公共阶级秩序
{
公共秩序();
公共Guid ID{get;set;}
公共列表OrderItems{get;set;}
}
公共类OrderItem
{
公共订单项();
公共Guid ID{get;set;}
公共字符串ProductName{get;set;}
公共整数数量{get;set;}
}
} 
id是guid。我需要搜索具有指定GUID的对象。有人告诉我,一种方法是针对该类指定一个接口(请参见:)。但是,由于我的类是生成的,所以我不希望更改该类。所以我想研究一种使用LINQ处理对象的方法。我还发现了这篇关于这种方法的非常好的SO帖子:,但当然需要指定查询中的所有子类

乐观地说,我希望“给我一个GUID为x的对象”。guid是唯一的,所以我觉得不需要指定路径。然而,我想这是不可能的LINQ


编辑:更新了上面的代码。道歉。我想提取GUID=X的OrderItem,假设您有一组不同的对象,如下所示:

List<object> data = new List<object>() { new Order { ID = ... }, new Document { ID = ... } };
List<Document> data = ...;
Guid guidToSearch = ...;
var orderItems = data.SelectMany(o => o.Orders)
                     .SelectMany(o => o.OrderItems)
                     .Where(o => o.ID == guidToSearch)
                     .ToList();
List data=newlist(){neworder{ID=…},newdocument{ID=…};
然后你可以写这样的代码

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

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

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

List<object> data = new List<object>() { new Order { ID = ... }, new Document { ID = ... } };
List<Document> data = ...;
Guid guidToSearch = ...;
var orderItems = data.SelectMany(o => o.Orders)
                     .SelectMany(o => o.OrderItems)
                     .Where(o => o.ID == guidToSearch)
                     .ToList();
列表数据=。。。;
Guid guidToSearch=。。。;
var orderItems=data.SelectMany(o=>o.Orders)
.SelectMany(o=>o.OrderItems)
.Where(o=>o.ID==guidToSearch)
.ToList();

如果您只有一个文档,而没有列表,您可以跳过第一个
选择many
呼叫。

请至少显示编译代码。这看起来像是C#和VB.NET的混合体。
document.Orders.SingleOrDefault(x=>x.ID==yourGuid)有什么问题?大家好,非常感谢迄今为止的帮助。为代码的简洁性道歉。我现在已经改正了。我添加了一个额外的类“OrderItems”,我需要使用OrderItem ID从中提取一个对象。指定完整的路径似乎是唯一的方法。我试图解决的问题是,这个对象中还有其他主细节实体,因此我正在研究是否有一种更通用的方法,可以通过它的唯一GUID访问对象,而无需指定查询中的所有组成实体,如Order、OrderItems等。我想答案是否定的,如SQL。@Knagis,谢谢你。非常有用。我是否正确地假设“LINQ到对象”是进入复杂对象结构对结构执行CRUD类型操作的推荐方法吗?LINQ to objects是解决这些问题的简单方法,但它始终取决于具体情况-在许多情况下,可以找到另一种性能更高或更易于阅读的方法。@Knagis,谢谢,非常感谢。刚才有一些关于在由文档继承的抽象类上实现接口的好建议。再次感谢。