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.WhereIEnumerable<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 });
于 2012-11-15T18:08:41.923 に答える
1

の結果である を として使用しようとしてc.Actions.Where(a => (a.comment== "") )IEnumerableますbool。私の理解が正しければ、この式Anyの代わりに、または のような他の集計関数を使用することをお勧めします。WhereAll

于 2012-11-15T18:08:05.137 に答える
1

c.Actions.Where(a => (a.comment== "") )アクションのリストを返しますが、それをブール値として使用しています ( with &&)。を使用.Any()して一致するものがあるかどうかをテストするか、リファクタリングして true/false テストをWhere()

もっと具体的なアドバイスをしたいのですが、空の文字列と比較している理由がわかりません。

于 2012-11-15T18:08:17.850 に答える