如何从泛型中获取bool值作为返回的对象

时间:2012-08-03 11:31:26

标签: c# linq

我有这样的结构。

 public class ExportStructure
    {
        public string issueid { get; set; }
        public string filename {get;set;}
        public bool export { get; set; }
    }
public class ExportStructureManager
    {
        public List<ExportStructure> ExportIntoStructure { get; set; }
        public ExportStructureManager()
        {
            this.ExportIntoStructure = new List<ExportStructure>();
        }
        public ExportStructure AddToStructure(string issueid,string filename,bool exportornot)
        {
            ExportStructure expstr = new ExportStructure();
            expstr.issueid = issueid;
            expstr.filename = filename;
            expstr.export = exportornot;

            this.ExportIntoStructure.Add(expstr);
            return (expstr);
        }
        public bool GetStatusFromStructure(string issuekey)
        {
          return (from p in ExportIntoStructure
                where p.issueid == issuekey
                select p.export));
        }
    }

从上面的内容中,我想执行GetStatusFromStructure,以便它返回export属性状态。对于那个我写的那样。但它正在给出错误

  

无法将类型'System.Collections.Generic.IEnumerable'隐式转换为'bool'

select p.export 如何解决这个问题?

4 个答案:

答案 0 :(得分:12)

问题是您的查询是检索bool值的序列 - 每个匹配您的过滤器的记录一个。大概你只期望一个结果,所以你可以使用Single

return (from p in ExportIntoStructure
        // I assume you meant == rather than =
        where p.issueid == issuekey
        select p.export).Single();

但如果有多个结果或根本没有结果,你也应该考虑你想要发生什么。选项包括:

  • Single
  • SingleOrDefault
  • First
  • FirstOrDefault
  • Last
  • LastOrDefault

哪一个合适取决于您希望在这些情况下的行为。

您可能还想考虑将其设为非查询表达式:

return ExportIntoStructure.Where(p => p.issueid == issuekey)
                          .Select(p => p.export)
                          .Single();

甚至首先匹配单个对象,然后项目:

return ExportIntoStructure.Single(p => p.issueid == issuekey)
                          .export;

答案 1 :(得分:1)

更改声明

return (from p in ExportIntoStructure
            where p.issueid = issuekey
            select p.export));

return (from p in ExportIntoStructure
            where p.issueid == issuekey
            select p.export)).Single();

但请确保isskey存在,否则会抛出异常。或尝试其默认值。

return (from p in ExportIntoStructure
            where p.issueid == issuekey
            select p.export)).SingleOrDefault();

答案 2 :(得分:0)

在查询结束时添加FirstOrDefault匿名方法。

return (from p in ExportIntoStructure
            where p.issueid = issuekey
            select p.export)).FirstOrDefault();

FirstOrDefault(或SinlgeOrDefault())匿名方法是好的,如果没有结果,它将返回null,如果你将使用onoy First或Single,如果没有值,则会抛出错误!

答案 3 :(得分:0)

将功能更改为:

    public bool GetStatusFromStructure(string issuekey) 
    { 
        return (from p in ExportIntoStructure 
                where p.issueid = issuekey 
                select p.export).FirstOrDefault()); 
    } 

但要注意,如果没有匹配,则它将是布尔默认值,即false。