2012-08-03 53 views
4

我有这样的结构。如何从泛型返回对象的bool值

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”到“布尔”

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

+2

不应该是'where p.issueid == issuekey' – 2012-08-03 11:34:25

回答

11

问题是,您的查询是检索序列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

更改声明

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(); 
0

在thw查询的末尾添加FirstOrDefault annonymous方法。

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

FirstOrDefault(或SinlgeOrDefault())annonymous是一个好方法,如果没有结果,它会返回null,如果您将使用onoy首先还是单身,如果没有价值,没有将错误时,抛出!

0

更改的功能如下:

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

但要注意,如果没有匹配这将是布尔默认,即假。