我有一些SQL视图,使用不同的源表,但每个视图返回完全相同的结构。
简单来说:
view1
select tblA.Name as custName,
tblA.DOB as DateOfBirth,
tblA.accountBalance as AccountBalance
from myFirstTable tblA
view2
select tblB.AccountName as custName,
tblB.BirthDate as DateOfBirth,
tblB.Balance as AccountBalance
from mySecondTable tblB
view3
select tblC.CustomerName as custName,
tblC.DateOfBirth as DateOfBirth,
tblC.accBal as AccountBalance
from myThirdTable tblC
所以,即使源表中的字段名称不同,不同的视图返回具有相同名称(和类型)的字段。实际视图是复杂而庞大的,每个视图运行到数百行。
然后,我将这些视图拖入我的 Linq-to-sql 设计器中,并尝试在通用类中使用它们。
public static List<T> MainSearch<T>(ReportParams RP)
{
MyDataContext dc = new MyDataContext();
if (string.IsNullOrEmpty(RP.appType)) { return null; }
var searchQuery = new List<T>();
switch (RP.appType)
{
case "type1":
searchQuery = (from t in dc.view1s select t);
break;
case "type2":
searchQuery = (from t in dc.view2s select t);
break;
case "type3":
searchQuery = (from t in dc.view3s select t);
break;
}
//do other stuff with search query depending on params
DateTime dtFrom = Convert.ToDateTime(RP.fromDate);
searchQuery = searchQuery.Where(q => convert.ToDateTime(q.DateOfBirth) >= dtFrom);
//and so on...
这里的想法是使用通用前端,根据用户选择传递参数,然后这些参数用于缩小对特定源数据的搜索结果(永远不会返回组合,始终只有三种视图之一)。
上述代码无法运行。在我的switch语句中,智能感知会抱怨无法隐式转换从特定类型(例如view1)到T的泛型列表。这使我无法在lambda表达式中继续使用强类型。
是否有任何方法可以实现我正在尝试做的事情,或者我完全错了?