var filters = new List<AllowedFilterModel>();
var collections = _collectionManager.GetAll();
var storesLookup = collections.Select(c => new LookupModel
{
Id = c.StoreId,
DisplayName = c.StoreName
}).ToList();
var distinctstoresLookup = storesLookup.GroupBy(c => new {c.DisplayName,c.Id }).Select(c=>c.First()).ToList();
filters.Add(new CollectionFilterModel(FilterVariables.Store)
{
FilterType = FilterDataType.Collection,
AllowedValues = distinctstoresLookup
});
有没有一种方法可以简化此查询或将其中的一些组合?
答案 0 :(得分:2)
您可以挂断中间的ToList
呼叫。他们不必要地将查询具体化为一个列表。看来您的存储库应该查询数据库。 ToList
强制进行客户端评估,这在很大程度上破坏了性能。使用SQL Server Profiler可以了解我的意思。
同样,_collectionManager.GetAll()
必须返回IQueryable
。
您的GroupBy
仅实现Distinct
。然后,从每个组中选择第一个。但是同一组中的所有对象都是相同的。我怀疑这是一个逻辑错误...
根据查询的情况,您可以将其设置为:
var results =
_collectionManager.GetAll()
.Select(c => new LookupModel
{
Id = c.StoreId,
DisplayName = c.StoreName
})
.Distinct()
.ToList();
比使用所有这些临时变量更具可读性。