我有一个 LINQ 查询,我试图从 2 个表返回数据,但我加入的表是有条件的。
这就是我想做的:
if (teamType == "A"){
var query = from foo in context.People
join foo2 in context.PeopleExtendedInfoA
select foo;
}
else {
var query = from foo in context.People
join foo2 in context.PeopleExtendedInfoB
select foo;
}
然后我会进一步过滤查询。我显然无法以这种方式设置它,因为我无法访问 if 块之外的“查询”,但它显示了我正在尝试执行的操作。这是我稍后尝试对查询执行的操作的示例:
if (state != null)
{
query = query.Where(p => p.State == state);
}
if (query != null) {
var queryFinal = from foo in query
select new PeopleGrid()
{
Name = foo.Name,
Address = foo.Address,
Hobby = foo2.Hobby
}
}
我试图返回的是表 foo 中的所有数据,然后是连接表中的一个字段,但根据逻辑,连接表会有所不同。 PeopleExtendedInfoA 和 PeopleExtendedInfoB 都有列“Hobby”,但我无法从连接表访问“Hobby”,这是我需要从连接表中访问的唯一字段。
我该怎么做呢?
Does PeopleExtendedInfoA
and PeopleExtendedInfoB
继承自同一个基类?你可以创建一个IQueryable<BaseClass>
并在您添加联接时让 linq 提供程序为您解决该问题。对于样品:
IQueryable<BasePeople> basePeople;
if (teamType == "A")
basePeople = context.PeopleExtendedInfoA;
else
basePeople = context.PeopleExtendedInfoB;
var query = from foo in context.People
join foo2 in basePeople on foo.Id equals foo2.PeopleId
select new PeopleGrid()
{
Name = foo.Name,
Address = foo.Address,
Hobby = foo2.Hobby
};
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)