4
我試圖根據Baa的第二個列表中的一些值過濾我的第一個Foo列表。如何通過單個屬性來交叉兩個不同的.NET列表?
例如。
這裏的an example I put up on .NET Fiddle ...
var foos = new List<Foo>
{
new Foo { Name = "Leia" },
new Foo { Name = "Han Solo" },
new Foo { Name = "Chewbacca" },
new Foo { Name = "Luke" },
};
var baas = new List<Baa>
{
new Baa { Alias = "aaaaa" },
new Baa { Alias = "bbbb" },
new Baa { Alias = "Leia" },
new Baa { Alias = "Luke" }
};
// Expected output:
// List<Foo> results = Foo { "Leia" } and Foo { "Luke" };
看我怎麼這麼問的:篩選第一列表(由Name
)由第二列表Alias
財產。
這將返回一個列表Foo
其中有2個結果嗎?
任何線索?在一個完整的工作.NET小提琴
var query =
from f in foos
join b in baas on f.Name equals b.Alias
select f;
如果您的集合包含很多項目,那麼使用'HashSet'而不是'List'可能是明智的。檢查一個項目是否包含在HashSet中是一個O(1)操作,它可以極大地提高計算交集的速度。在'HashSet'類中有一個專門的方法,請參閱:http://msdn.microsoft.com/en-us/library/vstudio/bb918911%28v=vs.90%29.aspx – Benlitz
*非常*好點@Benlitz!在我的情況下,每個列表將只是幾個項目。但是答案真的可以幫助我將來的開發,我可能不得不處理列表交集。如果兩個集合都是'HashSet',我們很希望看到一些使用'Intersects'關鍵字的示例代碼。 –
@ Pure.Krome不能使用'Intersect',因爲這些列表有兩種不同的類型。 –