我有許多不同的表格,每個表格都有一些常用的列和一些對每個表唯一的列。我使用實體框架來操作這些表,LINQ查詢過濾,排序等。下面的代碼是我正在運行的情況的一個高度簡化的例子。函數可以採取不同的表格,並在公共列上操作
var filter = "A";
using (var dc = new MyDataEntities())
{
var rpt1 = dc.Table1.Where(x => x.Name.StartsWith(filter));
var rpt2 = dc.Table2.Where(x => x.Name.StartsWith(filter));
var rpt3 = dc.Table3.Where(x => x.Name.StartsWith(filter));
}
如果我決定我想改變StartsWith過濾器包含例如,我必須改變它的3個名額。如果我決定要添加排序,我必須將它添加到3個位置等等(正如您可以猜到,我的實際代碼具有跨多個類的邏輯發生,並且多於3個實例。)
有什麼方法可以編寫一個可以接受任何表並在該表的公共列上操作的函數?所以,我最終的結果會是這樣的:
using (var dc = new MyDataEntities())
{
var rpt1 = Filter(dc.Table1);
var rpt2 = Filter(dc.Table2);
var rpt3 = Filter(dc.Table3);
}
這樣我可以把對名稱列篩選邏輯上的任何我的表到一個過濾器()函數。想法?
您是否考慮過向您的實體添加接口? 'INamedEntity {string Name {get; set; }'?然後你可以編寫一個保存你的查詢並具有通用查詢方法的類,例如'列表 GetByName (字符串名稱)其中TEntity:class,INamedEntity'。或者返回'IQueryable'來進一步過濾。 –
2014-10-03 15:42:07
是rpt1,rpt2,rpt3全部是相同的類型,與Table1,Table2,Table3相同? – dbarnes 2014-10-03 17:36:31
@dbarnes現在,它們是不同的類型,即rpt1將是IEnumerable,rpt2是IEnumerable 等。如果將它們彙集到一個通用類型中使得解決方案值得考慮。 –
gfrizzle
2014-10-03 17:42:59