C# 如何在lambda表达式中设置两个条件

C# 如何在lambda表达式中设置两个条件,c#,linq,language-features,C#,Linq,Language Features,我有两个中继器控制 var list = from i in DA.obm_view_studentLists where i.FranchiseID == FranchiseID && i.ExamDate == DateTime.Parse(this.pallavi.DropDownSelectedValue) select i; 我想从数据库中得到一个结果 this._approvedStudentList.DataSource = list.Select(e =>

我有两个中继器控制

var list = from i in DA.obm_view_studentLists where i.FranchiseID == FranchiseID && i.ExamDate == DateTime.Parse(this.pallavi.DropDownSelectedValue) select i;
我想从数据库中得到一个结果

this._approvedStudentList.DataSource = list.Select(e => e.ApprovedByOBM == true);

this._pendingStudentList.DataSource = list.Select(e => e.ApprovedByOBM == false);
我在pendingStudentList中继器中有一个标签字段UnPaidTotal,我想在其中显示待支付的总费用

我试过了,但失败了

UnPaidTotal = string.Format("{0:c}", list.Select(e => e.ApprovedByOBM == true).Sum(j => j.CourseFee));
计算列表以一次获得所有结果-只需将i换行…在括号中选择i并在末尾添加.ToList

设置数据源时,替换列表。选择…为列表。其中

获取未付总额时也是一样-使用Where而不是Select

您不需要从数据库返回两个集合,因为您正在基于布尔值分割结果。您需要所有查询结果,因为无论每个结果属于一个集合还是另一个集合,都可以在内存中拆分它们


Select用于对集合执行转换,而Where是筛选器。select的一个示例是manufacturerList=carCollection.Selectcar=>car.Manufacturer;。这将获取一个汽车集合,并通过从集合的每个成员中仅选择该属性,将其转换为制造商的可枚举项。

这里的关键是,在您为列表变量创建查询的第一行代码之后,您还没有进入数据库。您所做的只是创建一个IEnumerable/IQueryable,它知道如何进入数据库并获取数据。在您实际将其绑定到控件或尝试迭代结果之前,不会发生任何事情

您的问题是,当您最终绑定到第一个控件时,IEnumerable的状态会发生更改,因此它现在指向结果集的末尾,而不是等待在开始时打开数据库。当您尝试绑定第二个中继器时,那里没有记录


解决这一问题的最简单方法是简单地将原始查询结果放在一个列表中,尽管您应该知道这会导致web服务器将整个结果集加载到RAM中。另一种选择是使用一个转发器,对查询进行适当的排序,并根据您拥有的行类型和节之间的额外html使用代码输出所需的html。这将更好地执行,但会跨越不同层之间的界限。

您收到的错误消息是什么?我认为您需要a.Where not a.选择,然后您可以将条件放在一起&&其中p=>p.x==a&&p.y==b