Linq返回列表或单个对象

Nel*_*eis 7 c# linq enums .net-3.5

我有像这样的Linq to Entities查询:

var results = from r in entities.MachineRevision
              where r.Machine.IdMachine == pIdMachine
                 && r.Category == (int)pCategory
              select r;
Run Code Online (Sandbox Code Playgroud)

通常,我使用下面的代码来检查是否返回了一些结果:

if (results.Count() > 0)
{
    return new oMachineRevision(results.First().IdMachineRevision);
}
Run Code Online (Sandbox Code Playgroud)

但是,我在if条件中得到NotSupportedException.

错误消息是:无法创建类型'Closure type'的常量值.在此上下文中仅支持原始类型(例如Int32,String和Guid').

请注意,pCategory是Enum类型.

tva*_*son 11

编辑:根据您的更新,错误可能与您的实体类中的枚举有关.有关更多信息和解决方法,请参阅此博客条目.我将原始答案作为对查询语法的改进.

尝试使用FirstOrDefault在查询本身中选择第一个实体,然后检查结果是否为null.

int compareCategory = (int)pCategory; // just a guess
var result = (from r in entities.MachineRevision
              where r.Machine.IdMachine == pIdMachine
                 && r.Category == compareCategory
              select r).FirstOrDefault();

if (result != null)
{
     return new oMachineRevision(result.IdMachineRevision);
}
Run Code Online (Sandbox Code Playgroud)