c#linq Groupby查询忽略布尔上的Where
我有一个IEnumerable,我想先用它过滤。在bool上的Where,然后像这样的GroupByc#linq Groupby查询忽略布尔上的Where,c#,linq,C#,Linq,我有一个IEnumerable,我想先用它过滤。在bool上的Where,然后像这样的GroupBy int someInt = orderEditorViewModel.EditOrderFitters.Where(f => f.Delete == false).GroupBy(f => f.OrderFitter.Person).Count(); EditOrderFitters是一个 public class EditOrderFitter {
int someInt = orderEditorViewModel.EditOrderFitters.Where(f => f.Delete == false).GroupBy(f => f.OrderFitter.Person).Count();
EditOrderFitters是一个
public class EditOrderFitter
{
[Display(Name = "Delete?")]
public bool Delete { get; set; }
public bool Added { get; set; } // this is hidden
public OrderFitter OrderFitter { get; set; }
}
但即使Delete为true,查询也包括EditOrderFitter
我先用这个冗长的解决方法过滤掉
List<EditOrderFitter> notDeletedOrderFitters = new List<EditOrderFitter>();
foreach (EditOrderFitter e in orderEditorViewModel.EditOrderFitters)
{
if (!e.Delete)
{
notDeletedOrderFitters.Add(e);
}
}
这是可行的,但这有什么问题吗
.Where(f => f.Delete == false)
在第一个linq查询中。我也试过:
int someInt = orderEditorViewModel.EditOrderFitters.Where(f => !f.Delete).GroupBy(f => f.OrderFitter.Person).Count();
但同样,该列表没有被过滤
向大家道歉,我正在查看此if语句的LHS,以测试列表中的重复条目,而我本应同时查看这两个条目
if (orderEditorViewModel.EditOrderFitters.Where(f => f.Delete == false).GroupBy(f => f.OrderFitter.Person).Count() < orderEditorViewModel.EditOrderFitters.Where(f => f.Delete == false).Count())
if(orderEditorViewModel.editorfitters.Where(f=>f.Delete==false).GroupBy(f=>f.OrderFitter.Person).Count()f.Delete==false).Count()
感谢您的回复和评论!
我忘了在两边都删除了我刚刚复制了你的情况,它给了我正确的结果,你可以检查一下生活
它是EF还是内存中的集合?循环应该与
orderEditorViewModel.EditOrderFitters.Where(f=>!f.Delete).ToList()完全相同。是的,我错了,我已经编辑了这个问题。谢谢你,我错了,我已经编辑了这个问题。非常感谢。这帮助我睁开眼睛,看到了错误。
if (orderEditorViewModel.EditOrderFitters.Where(f => f.Delete == false).GroupBy(f => f.OrderFitter.Person).Count() < orderEditorViewModel.EditOrderFitters.Where(f => f.Delete == false).Count())
using System;
using System.Linq;
// https://stackoverflow.com/questions/59702370/c-sharp-linq-groupby-query-ignoring-where-on-bool
public class Program
{
public static void Main()
{
var orderEditorViewModel = new
{
ParentName = "xyz",
EditOrderFitters = new []
{
new EditOrderFitter { Delete = true, OrderFitter = new OrderFitter { Id = 1, Person = "1" } },
new EditOrderFitter { Delete = false, OrderFitter = new OrderFitter { Id = 1, Person = "2" } },
new EditOrderFitter { Delete = false, OrderFitter = new OrderFitter { Id = 1, Person = "2" } },
new EditOrderFitter { Delete = false, OrderFitter = new OrderFitter { Id = 1, Person = "3" } }
}
};
var result = orderEditorViewModel.EditOrderFitters.Where(f => !f.Delete).GroupBy(f => f.OrderFitter.Person);
foreach(var item in result)
Console.WriteLine("" + " Count: " + item.Count());
}
public class EditOrderFitter
{
public bool Delete { get; set; }
public bool Added { get; set; }
public OrderFitter OrderFitter { get; set; }
}
public class OrderFitter
{
public int Id { get; set; }
public string Person { get; set; }
}
}