2

我有一个对象,其中包含另一个对象的列表,如下所示:

    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 
4

3 回答 3

4

问题是你正在使用c.Actions.Where. 这将返回a ,而IEnumerable<T>不是 a 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 });
于 2012-11-15T18:08:41.923 回答
1

您正在尝试将 的c.Actions.Where(a => (a.comment== "") )结果IEnumerable用作bool. 如果我理解正确,您可能希望在此表达式中使用Any而不是Where- 或其他聚合函数,如All.

于 2012-11-15T18:08:05.137 回答
1

c.Actions.Where(a => (a.comment== "") )返回操作列表,但您将其用作布尔值(带有&&)。您应该使用.Any()来测试是否有匹配的东西,或者重构以便真/假测试与Where()

我会给出更具体的建议,但我不确定你为什么要与空字符串进行比较。

于 2012-11-15T18:08:17.850 回答