C# 如何在初始化列表之前在查询中获取值
您好,我刚刚开始使用MVC i实体框架,我遇到了问题。 我可以在查询中获取Val4的值吗? 我想我浪费时间初始化我的列表两次C# 如何在初始化列表之前在查询中获取值,c#,asp.net-mvc,entity-framework,C#,Asp.net Mvc,Entity Framework,您好,我刚刚开始使用MVC i实体框架,我遇到了问题。 我可以在查询中获取Val4的值吗? 我想我浪费时间初始化我的列表两次 var query = from p in db.Table1 join s in db.Table2 on p.ID equals s.sID join m in db.Table3 on s.sID equals m.ID group s by p into G selec
var query = from p in db.Table1
join s in db.Table2 on p.ID equals s.sID
join m in db.Table3 on s.sID equals m.ID
group s by p into G
select new Row
{
Val1 = G.Key,
Val2 = G.Sum(x => x.someVal),
Val3 = (from Z in db.Table4
join p in db.Table5 on Z.ID equals p.ZamowienieID
select p.otherVal).ToList().DefaultIfEmpty(0).Sum(),
Val4 = 0,
};
var list = query.ToList();
list.ForEach(x => x.Val4 = ((decimal)x.Val3 / (x.Val2 + (decimal)x.Val3)) * 100});
list = list.OrderbY(x =>x.Val4).ToList();
最好使用
Val4
属性的getter
public class Row
{
public int Val1 { get; set; }
public int Val2 { get; set; }
public int Val3 { get; set; }
public decimal Val4
{
get
{
return (decimal)Val3 / (Val2 + (decimal)Val3) *100;
}
}
}
查询如下所示:
var query = from p in db.Table1
join s in db.Table2 on p.ID equals s.sID
join m in db.Table3 on s.sID equals m.ID
group s by p into G
select new Row
{
Val1 = G.Key,
Val2 = G.Sum(x => x.someVal),
Val3 = (from Z in db.Table4
join p in db.Table5 on Z.ID equals p.ZamowienieID
select p.otherVal).ToList().DefaultIfEmpty(0).Sum()
};
var result = query.ToList();
最好使用
Val4
属性的getter
public class Row
{
public int Val1 { get; set; }
public int Val2 { get; set; }
public int Val3 { get; set; }
public decimal Val4
{
get
{
return (decimal)Val3 / (Val2 + (decimal)Val3) *100;
}
}
}
查询如下所示:
var query = from p in db.Table1
join s in db.Table2 on p.ID equals s.sID
join m in db.Table3 on s.sID equals m.ID
group s by p into G
select new Row
{
Val1 = G.Key,
Val2 = G.Sum(x => x.someVal),
Val3 = (from Z in db.Table4
join p in db.Table5 on Z.ID equals p.ZamowienieID
select p.otherVal).ToList().DefaultIfEmpty(0).Sum()
};
var result = query.ToList();
可以,但不能直接在
行
初始值设定项中
以便能够在Val4
和投影中重用Val3
和Val3
。如果您使用的是LINQ方法语法,那么您将使用中间匿名投影(Select
)。在查询语法中,可以将表达式用于相同目的:
var query = from p in db.Table1
join s in db.Table2 on p.ID equals s.sID
join m in db.Table3 on s.sID equals m.ID
group s by p into G
let Val2 = G.Sum(x => x.someVal)
let Val3 = (from Z in db.Table4
join p in db.Table5 on Z.ID equals p.ZamowienieID
select p.otherVal).DefaultIfEmpty(0).Sum()
let Val4 = ((decimal)x.Val3 / (x.Val2 + (decimal)x.Val3)) * 100
orderby Val4
select new Row
{
Val1 = G.Key,
Val2 = Val2,
Val3 = Val3,
Val4 = Val4,
};
可以,但不能直接在
行
初始值设定项中
以便能够在Val4
和投影中重用Val3
和Val3
。如果您使用的是LINQ方法语法,那么您将使用中间匿名投影(Select
)。在查询语法中,可以将表达式用于相同目的:
var query = from p in db.Table1
join s in db.Table2 on p.ID equals s.sID
join m in db.Table3 on s.sID equals m.ID
group s by p into G
let Val2 = G.Sum(x => x.someVal)
let Val3 = (from Z in db.Table4
join p in db.Table5 on Z.ID equals p.ZamowienieID
select p.otherVal).DefaultIfEmpty(0).Sum()
let Val4 = ((decimal)x.Val3 / (x.Val2 + (decimal)x.Val3)) * 100
orderby Val4
select new Row
{
Val1 = G.Key,
Val2 = Val2,
Val3 = Val3,
Val4 = Val4,
};
我也这么想,但是
OrderBy
应该发生在内存中,例如var result=query.AsEnumerable().OrderBy(x=>x.Val4.ToList()
我也这么想,但是OrderBy
应该发生在内存中,例如var result=query.AsEnumerable().OrderBy(x=>x.Val4.ToList()代码>