Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/258.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 实体框架使用已选定的值,该值稍后保存在select语句中的新变量中_C#_Asp.net_Entity Framework_Linq To Sql - Fatal编程技术网

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()
获得实际结果(执行工作负载)。第二,如果试图从一个直接的
查询
使用
一个可计算的
来允许在
选择

中使用更复杂的函数,我认为这里的性能也不错。因为第二次选择从第一次选择的结果中选择,而不是从数据库中选择。。。好主意。。。也许这对我来说是正确的方法,我会等一段时间再考虑其他建议,这些建议是正确的(我使用的)