将LINQ对象转换为另一个LINQ类

时间:2015-06-25 16:43:22

标签: c# windows linq tsql

在SQL数据库中,我有两个表,TablleA和TableB。

TableA摘要是:

Column1 int IDENTITY(1,1),
Column2 varchar(30),
Column3 money

TableB具有相同的架构,但反转的身份如下:

Column1 int IDENTITY(-1,-1),
Column2 varchar(30),
Column3 money

对于我在SQL中的查询目的,我将这两个表联合起来并保留唯一的记录标识。 现在,在我的C#winform应用程序中,我有以下方法。

private void DisplayContent(TableA tableObjectToDisplay)
private TableA FindRecord(int recordIdentity)

由于TableATableB LINQ类模式是相同的,而不是编写方法来查找和显示TableB类对象(与实体相同的身体),我宁愿重用利用TableA类的方法。

一种方法是改变现有方法以接受和返回object类值,测试类型并在每个方法中进行相应的转换。属性名称保持不变,因此可以重用代码。但是,我觉得走这条路有点野蛮。

有没有办法将一个LINQ类对象转换为另一个LINQ类对象? 是否有一个公共接口LINQ对象绑定到同一个数据库继承自我可以使用而不是野蛮的object

1 个答案:

答案 0 :(得分:3)

直接转换不起作用,因为语言是静态类型的。即使类在结构中完全相同,编译器也无法知道或保证它。

是否自动生成类型?通常涉及partial类,因此您可以定义接口并使用partial类来实现该接口。像这样:

interface ISomething
{
    int Column1 { get; }
    string Column2 { get; }
    decimal Column3 { get; } // or whatever the type is for money, I don't remember
}

然后添加部分类以伴随生成的部分类。像这样:

partial class TableA : ISomething
{
    // The interface is already implemented in the generated code
}

partial class TableB : ISomething
{
    // The interface is already implemented in the generated code
}

这应该允许您的公共代码接受ISomething的实例(当然希望更恰当地命名)而不是TableATableB具体:

private void DisplayContent(ISomething tableObjectToDisplay)