Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.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
C# 如何从对象列表的属性中提取不同的对象?_C#_Linq - Fatal编程技术网

C# 如何从对象列表的属性中提取不同的对象?

C# 如何从对象列表的属性中提取不同的对象?,c#,linq,C#,Linq,我创建了以下viewmodel,用于从我的数据库中获取单个列表中3个表的所有结果: public class ResultsVM { public Room room { get; set; } public Hotel hotel { get; set; } public List<Picture> pictures { get; set; } } 现在,我正试图从这个列表中提取一个新的列表,该列表具有不同的对象Hotel 有没有一种方法可以通过Linq来

我创建了以下viewmodel,用于从我的数据库中获取单个列表中3个表的所有结果:

public class ResultsVM
{
    public Room room { get; set; }
    public Hotel hotel { get; set; }
    public List<Picture> pictures { get; set; }
}
现在,我正试图从这个列表中提取一个新的列表,该列表具有不同的对象
Hotel


有没有一种方法可以通过Linq来实现它,或者我应该做一个循环并逐一比较它们?

假设
Hotel
对象具有唯一的ID,您可以通过此Linq查询获得不同的hotels:

List<ResultsVM> results = ...
var hotels = results
    .Select(r => r.Hotel)
    .GroupBy(h => h.HotelId)
    .Select(g => g.First())
    .ToList();
列出结果=。。。
var=结果
.选择(r=>r.酒店)
.GroupBy(h=>h.HotelId)
.Select(g=>g.First())
.ToList();

工作正常,谢谢。列出hotels=Model.Select(r=>r.hotel).GroupBy(h=>h.IdHotel.Select(g=>g.First()).ToList();我不知道你为什么要毫不犹豫地回答一个问题/duplicates@CamiloTerevinto我这样做的原因与你决定评论答案的原因相同,而不是将问题作为“数千个例子/副本”中的一个副本来结束。我的意思是,很难找到有意义的复制品。@Camiloterevento就“不尝试”而言,我毫不怀疑OP可以毫无问题地编写他的“循环和比较”策略。但如果我们至少知道他是如何获得
列表的,可能会有更好的方法。所以我怀疑他们用一个简单的foreach来做这件事的能力,除了标题是非常错误的。我只能从“给定对象”中获取一个对象。编辑了标题。编辑的不是我的标题
List<ResultsVM> results = ...
var hotels = results
    .Select(r => r.Hotel)
    .GroupBy(h => h.HotelId)
    .Select(g => g.First())
    .ToList();