C# 如何使用linq或entity根据某些值选择不同值的列表

C# 如何使用linq或entity根据某些值选择不同值的列表,c#,.net,sql-server,entity-framework,linq,C#,.net,Sql Server,Entity Framework,Linq,我想获取所有的Pre_编号,其中与该Pre_编号相关的所有协调状态=null。在这种情况下,列表中不应该有任何项目。如果2018年7月有其他一些Pre_编号,并且它有两个记录,并且这些记录的对账状态为空,那么我应该在列表中得到一个项目,即2018年7月 我试过了 var NoNReconciled = context.tbl_prerelease_invoice .Where(x => x.Reconcile_Status==null

我想获取所有的Pre_编号,其中与该Pre_编号相关的所有协调状态=null。在这种情况下,列表中不应该有任何项目。如果2018年7月有其他一些Pre_编号,并且它有两个记录,并且这些记录的对账状态为空,那么我应该在列表中得到一个项目,即2018年7月

我试过了

var NoNReconciled = context.tbl_prerelease_invoice
                           .Where(x => x.Reconcile_Status==null)
                           .Select(y => new { y.Pre_number }).Distinct().ToList();

但是我得到了2018年6月

好吧,您当前的尝试只检查至少有一条记录的
对账状态
为空,但它没有检查是否没有具有相同
预编号
的记录,其中
对账状态
不为空

这应该可以做到:

var NoNReconciled = context.tbl_prerelease_invoice
   .Where(x => x.Reconcile_Status == null && 
          !context.tbl_prerelease_invoice
          .Any(y => y.Pre_number == x.Pre_number && y.Reconcile_Status != null)
   ).Select(y => new { y.Pre_number })
   .Distinct().ToList();

无需为Pre_Number创建匿名对象。试试下面的代码

var NoNReconciled=context.tbl\u预发布\u发票
.其中(x=>x.U状态==null)
.Select(y=>y.Pre_number).Distinct().ToList()

试试这个-

context.tbl_prerelease_invoice.GroupBy(r => r.Pre_number).Where(kv => kv.All(r => r.Reconcile_Status==null)).Select(kv => kv.Key).ToList();

对我来说,调试是不可能的,因为我没有你拥有的上下文。我已经根据您在问题中提供的代码直接在答案中编写了代码。因此,事实上,我现在知道这是一个语法错误并没有帮助我找到问题。如果您可以更具体一些,也许我可以提供更多帮助。确定错误是:“bool”不包含“Select”的定义,并且找不到接受“bool”类型的第一个参数的扩展方法“Select”。请看,现在很明显,我缺少一个右括号。编辑了我的答案。@avinashSinghSandhu如果一个答案能帮助你表达你的欢迎,我想这应该会更好,以防表现更好,也更具可读性。你能把这个标记为有效答案吗?