抱歉,我是LINQ和Entity框架的新手。
当linq查询获取整个实体时, 如何将结果作为对象类型返回? 我的意思不仅仅是一个字段,而且还要返回该特定记录的所有字段,作为一个实体。
例如sql中的Staff表。返回人员对象实体。
如果我写这样的Linq代码:
var db= (from c in context.Staff
where c.id == sId
select new { s.sId,s.staffNo,s.name,s.surname,s.image});
return db; ---> here
给出错误,因为我想将结果作为Staff对象返回。
如何作为表列对象返回?
谢谢
答案 0 :(得分:3)
根据您的评论,您需要从您的方法返回一个对象。
要返回单个项目,您有以下选项。
First
:返回集合中的第一个项目,如果没有匹配的项目,则抛出异常。 FirstOrDefault
:与First
类似,但如果没有匹配的记录则会返回null
。 Single
:从列表中只返回一个项目,如果集合包含多个项目或集合为空,它将抛出异常。可能的用法是查询主键。只返回一条记录。特殊情况应该是有多个记录的时候。 SingleOrDefault
:与Single
在同一主体上工作,但如果集合为空则返回null。 所有这些方法都可以在查询语法的末尾添加,也可以接收谓词。像:
var db= (from c in context.Staff
where c.id == sId
select c).FirstOrDefault();
或者
var db = context.Staff.FirstOrDefault(c=> c.id == sId);
如果您的字段id
是主键,请使用SingleOrDefault
。
(旧答案
如果您尝试从表中返回特定列,那么您无法将结果投影到类Staff
,因为这是通过框架生成的。
您有两种选择。首先创建另一个具有与结果集相同属性的类并返回其对象。
或者,不是选择特定列,而是选择所有列,然后返回Staff
类型对象。
var db= from c in context.Staff
where c.id == sId
select c;
return db;
如果你想创建另一个类,可以说PartialStaff
,那么你可以这样做:
var db= from c in context.Staff
where c.id == sId
select new PartialStaff
{
Id = s.sId,
//.......rest of the properties
};
但是你的方法返回类型应该是PartialStaff
类型集合。
答案 1 :(得分:1)
当linq查询获取整个实体时,如何返回结果 作为对象类型?我的意思不仅仅是一个领域,而且还要归还所有领域 该特定列的字段,作为一个实体。
例如sql中的Staff表。返回人员对象实体。
你可以尝试这个:
var db= (from c in context.Staff
where c.id == sId
select c);
或
db = context.Staff.Where(s=>s.id == sId);
上述查询的结果是Staff对象的序列,IEnumerable<Staff>
。具体而言,此序列将包含Staff
中的所有context.Staff
个对象,其id
等于sId
。
给出错误,因为我想将结果作为Staff对象返回。
现在如果您确定context.Staff
中的一个项目最多只有给定的id
,那么您可以试试这个:
var db = (from c in context.Staff
where c.id == sId
select c).SingleOrDefault();
或
var db = context.Staff.SingleOrDefault(s=>s.id == sId);
此查询将返回具有给定Staff
的单个id
对象,如果Staff
中没有context.Staff
个对象,则此ID将返回null
。