gpt4 book ai didi

c# - 使用泛型方法返回 list,其中 T 可以是共享相同结构的三种类型之一

转载 作者:行者123 更新时间:2023-11-30 16:04:14 24 4
gpt4 key购买 nike

我有一些使用不同源表的 sql View ,但每个 View 都返回完全相同的结构。

非常简单:

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

因此,即使源表中的字段名不同,不同的 View 也会返回同名(和类型)的字段。实际 View 复杂而庞大,每个 View 有数百行。

然后我将这些 View 拖到我的 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...

想法是可以使用通用前端,根据用户选择传入参数,然后使用这些参数缩小搜索结果的范围,以搜索特定源数据(永远不会返回组合) ,它始终是三个 View 中的一个或另一个)。

上面的代码不起作用。在我的 switch 语句中,智能感知提示它无法从特定类型(例如 view1)隐式转换为 T 的泛型列表。这让我无法在 lambda 表达式中进一步使用强类型。

有什么方法可以实现我正在尝试做的事情,还是我在这里咆哮完全错误的树?

最佳答案

我还没有对此进行全面测试,但我认为您可以通过创建一个具有属性 custName、DOB 和 AccountBalance 的接口(interface)来实现。然后让每个生成的 LINQ-to-SQL 类(tblA、tblB、tblC)在单独的部分类文件中实现此接口(interface)。只要属性名称和类型匹配,这应该没问题。

interface IAccountTable
{
string custName { get; set; }
DateTime DOB { get; set; }
Decimal AccountBalance { get; set; }
}

partial class tblA : IAccountTable
{
}

使您的 searchQuery 成为该接口(interface)的列表。

var searchQuery = new List<IAccountTable>();

将您实际查询的结果转换到界面。

searchQuery = tblA.Where(t => t.custName == "Uday").Select(t => (IAccountTable)t).ToList();

关于c# - 使用泛型方法返回 list<T>,其中 T 可以是共享相同结构的三种类型之一,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35344220/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com