在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)
由于TableA
和TableB
LINQ类模式是相同的,而不是编写方法来查找和显示TableB
类对象(与实体相同的身体),我宁愿重用利用TableA
类的方法。
一种方法是改变现有方法以接受和返回object
类值,测试类型并在每个方法中进行相应的转换。属性名称保持不变,因此可以重用代码。但是,我觉得走这条路有点野蛮。
有没有办法将一个LINQ类对象转换为另一个LINQ类对象?
是否有一个公共接口LINQ对象绑定到同一个数据库继承自我可以使用而不是野蛮的object
?
答案 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
的实例(当然希望更恰当地命名)而不是TableA
或TableB
具体:
private void DisplayContent(ISomething tableObjectToDisplay)