【发布时间】:2015-07-02 19:25:32
【问题描述】:
我正在使用带有 EF 的 Linq to Entities 并希望有一种有效的方法来做到这一点。我正在做的是遍历一个列表,计算列表中的不同项目,将计数附加到一个元素上并使用 String.Join 返回一个字符串。我想要(并且我实现)是这样的
一(3),二(1),三(2)
来自具有此类项目的列表
一、三、一、三、二、一
如果我没有从我的 POCO 类中检索并为我的数据库中的每个条目即时处理所有这些并将列表传递给我的 DataGridView,这会更简单。
我的代码是这样的,
public class Module
{
//Other fields here
public string PartNumber { get; set; }
[ForeignKey("PartNumber")]
public Part Part { get; set; }
[ForeignKey("Location")]
public string WarehouseID { get; set; }
public Warehouse Location { get; set; }
}
还有一个
public class Warehouse
{
//Other fields here
public List<Module> Modules { get; set; }
}
然后这里是我检索列表的 POCO 类,对于每个实体,我想出了一个绑定到我的 datagridview 的字符串。
public class Part{
//Other fields
public string Locations
{
get
{
//I don't know how efficient this is but I feel that it helps
if (Modules.Count() < 1)
return "";
AirtelDataContext context = new AirtelDataContext();
var modules = context.Modules.Include("Location")
.Where(e => e.PartNumber == PartNumber && e.Location.WarehouseType != "Site")
.Select(a => a.Location.WarehouseName)
.ToList();
var q = from x in modules
group x by x into g
let count = g.Count()
orderby count descending
select (g.Key + " (" + count + ")").ToString();
return String.Join(", ", q);
}
}
}
正是这个只读的Location属性,我想提高它的效率。我的数据库 (MySql) 将包含少于 7000 个(可能最多 2000 个 Part 实体、2000 个 仓库 实体和最多 5000 个模块实体)
如果我能稍微提高性能,我将不胜感激。将部件实体加载到 DataGridView 需要 10 多秒。
【问题讨论】:
标签: c# winforms linq entity-framework entity-framework-6