我有这样的结构。
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
如何解决这个问题?
答案 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。