我正在使用一个14岁的架构,其中父表(P)包含一个类型(8种可能性)和位置(3种可能性)字段,它们一起指向24个特定表中的一个(A1,A2) ,A3,B1,B2,B3 ......),所有类型都有相同的模式。
我想创建一种访问特定表的通用方法,但似乎无法使其正常工作。
假设父表名为Document,两种特定类型(NewLetter,CurrentLetter和HistoricLetters)和(NewBill,CurrentBill和HistoricBills)。
public interface ILetter
{
DateTime CreationDate { get; }
}
public interface IBill
{
DateTime BillDate { get; }
}
// The LINQ 2 SQL generated classes already implement the CreationDate property
public partial class NewLetter : ILetter { }
public partial class CurrentLetter : ILetter { }
public partial class HistoricLetter : ILetter { }
然后在我的代码中,我希望能够做到这一点:
switch (type)
{
case 1:
Table<IBill> specificBill;
switch (location)
{
...
}
case 2:
Table<ILetter> specificTable;
switch (location)
{
case 1: specificTable = dataContext.NewLetter as Table<ILetter>; break;
case 2: specificTable = dataContext.CurrentLetter ...
case 3: specificTable = dataContext.HistoricLetter ...
}
}
或类似的东西。不幸的是,即使NewLetter实现了ILetter,我也无法将Table<NewLetter>
强制转换为Table<ILetter>
。有没有办法解决?我想我基本上是想在C#中创建一个视图,因为我没有在db本身创建一个视图的权限。
答案 0 :(得分:1)
DataContext
有一个通用的方法来检索你想要的表:
var table = dataContext.GetTable<NewLetter>();
也许你可以用它来重写你的查询:
var table = dataContext.GetTable<NewLetter>();
var letters =
from letter in table
where ...
select letter as ILetter;
答案 1 :(得分:0)
查看Linq2SQL中的继承。你的表需要某种鉴别器列/属性。