Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/16.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# 如何在初始化列表之前在查询中获取值_C#_Asp.net Mvc_Entity Framework - Fatal编程技术网

C# 如何在初始化列表之前在查询中获取值

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

您好,我刚刚开始使用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
            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()