从Entity IQueryable对象列表中选择一个对象

时间:2018-11-26 06:47:05

标签: c# entity-framework linq

我有下面显示的LINQ查询语句,该语句从SQL表查询Entity Framework PersonalityType对象。表格中有一列具有独特ID(手动创建)的个性。使用Linq,我希望对每个查询选择一个单行PersonalityType对象,因此实际上不需要使用.ToList()或.ToArray(),因为选择总是有一个匹配项。 / p>

    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>

1 个答案:

答案 0 :(得分:3)

如果您的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();