C# 实体框架使用已选定的值,该值稍后保存在select语句中的新变量中
我写了一些实体框架选择:C# 实体框架使用已选定的值,该值稍后保存在select语句中的新变量中,c#,asp.net,entity-framework,linq-to-sql,C#,Asp.net,Entity Framework,Linq To Sql,我写了一些实体框架选择: var query = context.MyTable .Select(a => new { count = a.OtherTable.Where(b => b.id == id).Sum(c => c.value), total = a.OtherTable2.Where(d => d.id == id) * count ... }); 我一直选择total: var query = context.
var query = context.MyTable
.Select(a => new
{
count = a.OtherTable.Where(b => b.id == id).Sum(c => c.value),
total = a.OtherTable2.Where(d => d.id == id) * count ...
});
我一直选择total:
var query = context.MyTable
.Select(a => new
{
count = a.OtherTable.Where(b => b.id == id).Sum(c => c.value),
total = a.OtherTable2.Where(d => d.id == id) * a.OtherTable.Where(b => b.id == id).Sum(c => c.value)
});
是否可以像我的第一个示例中那样选择它,因为我已经检索到了值(以及如何检索),还是应该再次选择它?一种可能的方法是使用两个连续的选择:
var query = context.MyTable
.Select(a => new
{
count = a.OtherTable.Where(b => b.id == id).Sum(c => c.value),
total = a.OtherTable2.Where(d => d.id == id)
})
.Select(x => new
{
count = x.count,
total = x.total * x.count
};
你会做的很简单
var listFromDatabase = context.MyTable;
var query1 = listFromDatabase.Select(a => // do something );
var query2 = listFromDatabase.Select(a => // do something );
虽然公平地说,Select
要求您返回一些信息,但您没有返回,您正在某处获取count
&total
并设置它们的值。如果你想这样做,我建议:
var listFromDatabase = context.MyTable.ToList();
listFromDatabase.ForEach(x =>
{
count = do_some_counting;
total = do_some_totalling;
});
请注意,ToList()
函数会阻止它成为IQueryable
并将其转换为一个实体列表,而且list
对象允许Linq
ForEach
如果要在中执行复杂的操作,请选择,我通常会这样做:
context.MyTable.AsEnumerable()
因为这样,您就不会试图仍然从数据库中查询
因此,概括一下:对于上面的部分,我的重点是将所有表内容放入变量中,使用ToList()
获得实际结果(执行工作负载)。第二,如果试图从一个直接的查询
使用一个可计算的
来允许在选择
中使用更复杂的函数,我认为这里的性能也不错。因为第二次选择从第一次选择的结果中选择,而不是从数据库中选择。。。好主意。。。也许这对我来说是正确的方法,我会等一段时间再考虑其他建议,这些建议是正确的(我使用的)