【发布时间】:2020-01-12 09:03:41
【问题描述】:
我有一个 IEnumerable,我尝试先在 bool 上使用 .Where 进行过滤,然后像这样使用 GroupBy 进行过滤
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);
}
}
然后:
int someInt = notDeletedOrderFitters.GroupBy(f => f.OrderFitter.Person).Count();
这行得通,但是有什么问题
.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())
感谢您的回复和cmets! 我忘了把删除放在两边
【问题讨论】:
-
是 EF 还是内存中的集合?
-
循环应该和
orderEditorViewModel.EditOrderFitters.Where(f => !f.Delete).ToList()完全一样。 -
确实如此,我的错误,我已经编辑了问题。谢谢。