4

我有这样的结构。

 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

4 回答 4

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;
于 2012-08-03T11:33:25.727 回答
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();

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

return (from p in ExportIntoStructure
            where p.issueid == issuekey
            select p.export)).SingleOrDefault();
于 2012-08-03T11:33:26.693 回答
0

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

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

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

于 2012-08-03T11:35:11.027 回答
0

把函数改成这样:

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

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

于 2012-08-03T11:36:55.630 回答