我首先使用EF代码,并且我有两个继承自基类(TPT
)的类:
public class Party
{
public int PartyId {get; set;}
}
public Person:Party
{
string FirstName { get; set; }
string LastName { get; set; }
}
public Organization:Party
{
string Name { get; set; }
}
现在,我想创建一个查询来获取Person
s等于“SomeName”的所有LastName
以及Organization
开始的所有Name
在一次交易中使用“A”。
像这样的东西
IList<Party> GetParties(string name, string organizationName)
{
IList<Party> result = new List<Party>();
using(var context = new MyContext())
{
var persons = context.Parties.OfType<Person>().Where(t=>t.LastName = name) ;
var organizations = context.Parties.OfType<Organization>().Where(t=>t.Name.StartWith(organizationName));
//return merge of persons and organizations
}
}
有没有办法做到这一点?
答案 0 :(得分:1)
你可以做到
context.Parties.OfType<Person>().Where(t=>t.LastName = name).OfType<Party>()
.Concat(context.Parties.OfType<Organization>()
.Where(t=>t.Name.StartWith(organizationName)))
您不必将第二个集合投放到Party
,因为它与一个与IQueryable<Party>
协变的IQueryable<Organization>
连接在一起。
答案 1 :(得分:-1)
我做了一些LINQPad摆弄,我相信这是你想要的结果。
IList<Party> GetParties(string name, string organizationName)
{
IList<Party> result = new List<Party>();
using(var context = new MyContext())
{
var persons = context.Parties.OfType<Person>().Where(t=>t.LastName = name) ;
var organizations = context.Parties.OfType<Organization>().Where(t=>t.Name.StartWith(organizationName));
//return merge of persons and organizations
result = (IList<Party>)persons.Union((IEnumerable<Party>)organizations);
}
return result;
}