簡體   English   中英

linq按對象分組

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM