我正在面对我的搜索/组功能的问题。Linq/EF Dynamic Group by with可选参数
语境
我有客户对象(实体框架上下文)的列表,我想找到这个列表中的所有可能的重复。对象是重复的标准应该是动态的。比方说,用户界面可以选择。
型号
假设以下部分给出。
我CustomerClass
public class Customer
{
public int CustomerId { get; set; }
public string SearchName { get; set; }
public string Mail { get; set; }
public DateTime? Birthday { get; set; }
public string CardNumber { get; set; }
public DateTime Created { get; set; }
}
为重复的可能标准是:SearchName,邮件,生日和CardNumber。
下面的函数返回一个适当的结果:
public IList<Customer> GetPossibleDuplicates()
{
IList<Customer> list;
list =
(from s in this.Context.Customers
group s by new
{
s.SearchName,
s.CardNumber
}
into g where g.Count() > 1 select g)
.SelectMany(g => g)
.OrderBy(o => o.SearchName)
.ThenBy(c => c.Created)
.ToList();
return list;
}
我有问题是由陈述“动态”,所以根据所选择的creteria分组制成,使该组。任何建议以获得良好解决方案?
谢谢安迪!提示导致更好的解决方案。但是对于IEqualityComparer,我只能在内存集合中检查equaltiy吗?因此,与多个客户的thousends似乎表现不佳,对吧? (this.Context是一个实体框架上下文) – zorkin82 2014-10-06 14:16:49
你说得对。我的回答是针对内存集合,我没有考虑过这是实体框架。当Entity Framework试图将其转换为SQL语句时,您甚至可能会因此发生运行时错误。 – 2014-10-06 14:49:37
好的。我将其标记为已接受,因为它符合我的要求。 – zorkin82 2014-10-07 12:33:32