【问题标题】:Select a single object from Entity IQueryable List of object从对象的实体 IQueryable 列表中选择单个对象
【发布时间】:2018-11-26 06:47:05
【问题描述】:

我有一个如下所示的 LINQ 查询语句,它从 SQL 表中查询实体框架 PersonalityType 对象。在表中有一个具有唯一 ID(手动创建)的列。使用 Linq,我想为每个查询选择一个单行 PersonalityType 对象,因此实际上不需要使用 .ToList() 或 .ToArray() 因为选择总是会有一个匹配项。

    public enum Personality{Introvert = 0, Extrovert = 1, Agreeable = 2, Non-Agreeable = 3};
    var Personality = (from p in _ctx.PersonalityType.AsNoTracking()
    where (p.Id == (int) person.personality) // Personality Enum to int
    select new PersonalityTypeModel
    {
          PersonalityDescription = p.Description,
          HTMLContent = p.HTML
    }).ToArray();

如何从 Linq 查询返回 PersonalityTypeModel 而不是 List<PersonalityTypeModel>

【问题讨论】:

标签: c# entity-framework linq


【解决方案1】:

如果您的 Sql 表每个 PersonalityType 有一条记录,那么您可以使用 ).SingleOrDefault();).FirstOrDefault(); 之类的

var Personality = (from p in _ctx.PersonalityType.AsNoTracking()
where (p.Id == (int) person.personality)
select new PersonalityTypeModel
{
      PersonalityDescription = p.Description,
      HTMLContent = p.HTML
}).SingleOrDefault();   //FirstOrDefault()

因此查询返回PersonalityTypeModel 的单个对象而不是List<PersonalityTypeModel>

注意:

如果您的 Sql 表包含多个具有特定 PersonalityType 的记录,那么您应该使用。

}).Take(1).SingleOrDefault();

否则会抛出异常。或者你可以简单地使用。

}).FirstOrDefault();

【讨论】:

  • 需要注意的是,如果你的表中有多个p.Id,就会抛出异常。
  • @SeM,这就是为什么我在回答中描述了If your Sql table have single record per PersonalityType,但无论如何我也添加了一个注释,感谢您的建议:)
猜你喜欢
  • 2019-09-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-01
  • 2018-03-04
相关资源
最近更新 更多