我有一个对象,其中包含另一个对象的列表,如下所示:
class cl
{
List<a> a ;
public List<a> listofA
{
get; set;
}
}
class a
{
//other properties
string comment ;
public string comment
{
get; set;
}
}
现在我如何进行linq查询以查看注释是否是某些字符串,这是我的查询:
var query = (from c in scope.Extent<cl>()
where c.Date >= dateFrom && c.Date < dateTo
&& c.Actions.Where(a => (a.comment== "") )
orderby c.Date.Value.Date
group c by c.Date.Value.Date into grpDate
select new { grpDate.Key, items = grpDate });
但我得错误说:
Error 15 Operator '&&' cannot be applied to operands of type 'bool' and 'System.Collections.Generic.IEnumerable<>
Error 13 Cannot convert lambda expression to type 'string' because it is not a delegate type
答案 0 :(得分:4)
问题是你正在使用c.Actions.Where
。这将返回IEnumerable<T>
,而不是bool
,但是您正在检查需要布尔值的where子句。
您最有可能使用Any
代替Where
来解决此问题:
var query = (from c in scope.Extent<cl>()
where c.Date >= dateFrom && c.Date < dateTo
&& c.Actions.Any(a => (a.comment== "") )
orderby c.Date.Value.Date
group c by c.Date.Value.Date into grpDate
select new { grpDate.Key, items = grpDate });
答案 1 :(得分:1)
您正尝试将c.Actions.Where(a => (a.comment== "") )
的结果IEnumerable
用作bool
。如果我理解正确,您可能希望在此表达式中使用Any
而不是Where
- 或其他聚合函数,例如All
。
答案 2 :(得分:1)
c.Actions.Where(a => (a.comment== "") )
返回一系列操作,但您将其用作布尔值(&&
)。您应该使用.Any()
来测试是否存在匹配或重构的内容,以便将真/假测试与Where()
我会给出更具体的建议,但我不确定你为什么要比较一个空字符串。