我正在面對我的搜索/組功能的問題。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