对象相交时快速设置属性?
Quickly set property when objects are intersected?
我在尝试设置 属性 时出现性能问题,而对象同时存在于两个列表
public class Product
{
public int Id { get; set; }
}
public class DerivateProduct : Product
{
public bool isIntersected{ get; set; }
}
public class Storage
{
public Product stProduct { get; set; }
}
//Approx 10,000 objects
ObservableCollection<DerivateProduct> Products;
//Approx 500 Objects
ObservableCollection<Storage> Storages;
我使用下面的代码,它可以工作,但是性能很差(大约 4 秒的结果)
Products.Where(cp => Storages.Any(b => b.stProduct.Id == cp.Id))
.ToList()
.All(cp => cp.isIntersected = true);
我尝试了以下方法,只用了 150 毫秒就得到了正确的迭代次数,但我不知道如何设置 isIntersected=true
同时具有相同的性能。
var intersectedId = Products.Select(cp => cp.Id)
.Intersect(Storages.Select(b => b.stProduct.Id))
.ToList();
我真的需要帮助。所有答案将不胜感激。
非常感谢@mjwills 它在 5 毫秒内工作得很好
var stPrIds = Storages.Select(b => b.stProduct.Id).ToArray();
foreach (var item in products.Where(cp => stPrIds .Contains(cp.Id)).ToList())
{
item.IsBiocontrol = true;
}
我在尝试设置 属性 时出现性能问题,而对象同时存在于两个列表
public class Product
{
public int Id { get; set; }
}
public class DerivateProduct : Product
{
public bool isIntersected{ get; set; }
}
public class Storage
{
public Product stProduct { get; set; }
}
//Approx 10,000 objects
ObservableCollection<DerivateProduct> Products;
//Approx 500 Objects
ObservableCollection<Storage> Storages;
我使用下面的代码,它可以工作,但是性能很差(大约 4 秒的结果)
Products.Where(cp => Storages.Any(b => b.stProduct.Id == cp.Id))
.ToList()
.All(cp => cp.isIntersected = true);
我尝试了以下方法,只用了 150 毫秒就得到了正确的迭代次数,但我不知道如何设置 isIntersected=true
同时具有相同的性能。
var intersectedId = Products.Select(cp => cp.Id)
.Intersect(Storages.Select(b => b.stProduct.Id))
.ToList();
我真的需要帮助。所有答案将不胜感激。
非常感谢@mjwills 它在 5 毫秒内工作得很好
var stPrIds = Storages.Select(b => b.stProduct.Id).ToArray();
foreach (var item in products.Where(cp => stPrIds .Contains(cp.Id)).ToList())
{
item.IsBiocontrol = true;
}