如何正确初始化var类型

时间:2015-10-09 12:59:19

标签: c# initialization

我有这段代码:

DatabaseContext dbContext = modul.CreateContext();

var returnvalue = dbContext.tbl_person
    .ToArray()
    .Select(item => new PersonGridRow
        {
            PersonID = item.PersonID,
            ...
        });

我需要让它更具动态性,因此它使用相同的选择,但使用不同的表。

我想做这样的事情:

DatabaseContext dbContext = modul.CreateContext();
var selection;
if(some condition)
{
    selection = dbContext.tbl_person;
}
else
{
    selection = dbContext.tbl_personHistory
}

var returnvalue = selection
    .ToArray()
    .Select(item => new PersonGridRow
        {
            PersonID = item.PersonID,
            ...
        });

两个表都相同。我知道var不是一个类型,而是执行时的类型是什么类型。我也尝试过使用动态关键字,但没有成功。 我该如何解决这个问题?

2 个答案:

答案 0 :(得分:3)

创建一个表示这些表共有的数据的接口:

public interface IPerson
{
    int PersonID {get;}
    //...
}

然后让您使用的两个表的两个实体类型实现该接口。完成后,您可以使用该接口声明变量:

DatabaseContext dbContext = modul.CreateContext();
IQueryable<IPerson> selection;
if(some condition)
    selection = dbContext.tbl_person;
else
    selection = dbContext.tbl_personHistory

var returnvalue = selection
    .Select(item => new PersonGridRow
        {
            PersonID = item.PersonID,
            ...
        });

答案 1 :(得分:0)

您可以使用conditional operator

<td ng-bind-html-unsafe="item.name"></td>

其他技术包括将EF中模型浏览器中var select = something == otherthing ? dbContext.tbl_person.Select(item => new PersonGridRow { PersonID = item.PersonID, ... }) : dbContext.tbl_personHistory.Select(item => new PersonGridRow { PersonID = item.PersonID, ... }); 表上的基本类型更改为与personHistory表相同的实体。那么你可以这样做......

person

另一个选择是分配和连接所有共享属性,然后将第一个表转换为 var select = ( something == otherthing ? dbContext.tbl_person : dbContext.tbl_personHistory ).Select(item => new PersonGridRow { PersonID = item.PersonID, ... }); 或&#39; IEnumerable`

IQueryable<IPerson>

最后,您可以在服务器端创建一个在 var select = ( something == otherthing ? (IQueryable<IPerson>)dbContext.tbl_person : dbContext.tbl_personHistory ).Select(item => new PersonGridRow { PersonID = item.PersonID, ... }); union all之间执行person的视图,并使用此视图作为查询的基础。