如何在LINQ中将查询结果作为特定对象类型返回

时间:2014-07-11 14:09:25

标签: c# linq entity-framework linq-to-sql return-type

抱歉,我是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对象返回。

如何作为表列对象返回?

谢谢

2 个答案:

答案 0 :(得分:3)

根据您的评论,您需要从您的方法返回一个对象。

要返回单个项目,您有以下选项。

  1. First:返回集合中的第一个项目,如果没有匹配的项目,则抛出异常。
  2. FirstOrDefault:与First类似,但如果没有匹配的记录则会返回null
  3. Single:从列表中只返回一个项目,如果集合包含多个项目或集合为空,它将抛出异常。可能的用法是查询主键。只返回一条记录。特殊情况应该是有多个记录的时候。
  4. SingleOrDefault:与Single在同一主体上工作,但如果集合为空则返回null。
  5. 所有这些方法都可以在查询语法的末尾添加,也可以接收谓词。像:

    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