[英]linq group by object
我有一個對象,其中包含另一個對象的列表,如下所示:
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
問題是您正在使用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 });
你正在嘗試使用的結果c.Actions.Where(a => (a.comment== "") )
這是IEnumerable
,作為一個bool
。 如果我理解正確,那么您可能想在此表達式中使用Any
而不是Where
或其他諸如All
聚合函數。
c.Actions.Where(a => (a.comment== "") )
返回一個動作列表,但是您將其用作布爾值(帶有&&
)。 您應該使用.Any()
來測試是否存在某些匹配項,或者應該進行重構,以便將正確/錯誤測試與Where()
分開
我會提供更具體的建議,但是我不確定為什么要與空字符串進行比較。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.