我试图检索使用LINQ的加入,与在实体框架表中的特定类,其中条件如下:获取特定对象后,加入使用LINQ
var result = (from a in db.Persons
join b in db.Person_IDs on a.PersonId equals b.PersonId
where b.FaceId == faceId
select new
{
PersonId = a.PersonId,
Name = a.Name,
Address = a.Address,
Picture = a.Picture,
City = a.City,
Estate = a.Estate,
Phone = a.Phone,
CellPhone = a.CellPhone,
BlackList = a.BlackList
}
).FirstOrDefault();
我想“结果”对象作为Person对象返回。在上面的例子中,我需要创建一个新的Person对象并添加来自结果的字段。
可能吗?我尝试了一些方法,并使用一些样本和研究,但没有任何替代方案为我工作。
谢谢!
更新1
好吧,一些读数之后,最好的我发现这样做是创造我的人对象DTO类,并在我的funcion返回这个DTO类如下方式:
PersonDTO result = (from a in db.Persons
join b in db.Person_IDs on a.PersonId equals b.PersonId
where b.FaceId == faceId
select new PersonDTO
{
PersonId = a.PersonId,
Name = a.Name,
Address = a.Address,
Picture = a.Picture,
City = a.City,
Estate = a.Estate,
Phone = a.Phone,
CellPhone = a.CellPhone,
BlackList = a.BlackList
}
).FirstOrDefault();
db.Dispose();
return result;
好吧,它工作正常,但有一件事困扰我:为什么要创建另一个类与EF类相同?为什么不能以这种方式使用EF类?
我正在使用一张表,但一个例如有20个表的程序将迫使我有20个实体类和20个实体DTO类!作为一个初学者,我认为这种工作方式有点混乱或无意义,使传统的方式(使用数据读取器,命令和连接)。即使更加官僚化,也不需要“重复”的对象。
有人可以提供这个答案吗?
更新2
按照要求:因为我不笏一个匿名类型在我的函数返回时,我试图回到实体类(人),但我这样做的时候,我得到以下错误我的应用程序执行:
“实体或复杂类型'Models.Person'不能在LINQ to Entities查询中构造。”
所以解决方案是创建一个DTO类(或视图模型类,无论)。
为什么不'选择了',而不是因为你没有使用任何字段从''b选择新...' '在你的结果? –
你正在创建一个匿名类型 – derloopkat
你做的是正确的...你只需要选择人而不是 –