0

私は次のことをしようとしていました

    public IList<Category> GetMainCategories()
    {
         return _context.Category
                 .Where(x => x.ParentCategory == null)
                 .OrderBy(x => x.SortOrder)
                 .ToList();
    }

ただし、コレクションですべての ParentCategory が null であることがわかりますが、何を試しても結果は返されませんか? 私はEFがこのようなnullに問題があることを読み、また試しました

.Where(x => x.ParentCategory.Equals(null))

.Where(x => Equals(x.ParentCategory.Id, null))
.Where(x => Equals(x.ParentCategory, null))

しかし、それでも同じ結果ですか?道に迷いました?オブジェクトがnullかどうかを確認するにはどうすればよいですか? VS2010 で調べると、null が明確に示されていますか?

アップデート

私はこれを行うことができますが、非常に非効率的です!!! クエリでこれを実行できる必要があります。そうしないと、EF にかなりショックを受けます。どんな助けでも大歓迎ですか?

    public IList<Category> GetMainCategories()
    {
        var cats = _context.Category
                 .OrderBy(x => x.SortOrder)
                 .ToList()
                 .Where(cat => cat.ParentCategory == null)
                 .ToList();
        return cats;
    }
4

3 に答える 3

0

時代遅れかもしれませんが、これがあなたが探していた答えだと思います。

public abstract class YourContext : DbContext
{
  public YourContext()
  {
    (this as IObjectContextAdapter).ObjectContext.ContextOptions.UseCSharpNullComparisonBehavior = true;
  }
}

Entity Framerworkは'C#like' null比較を使用するため、これで問題が解決するはずです。

于 2013-03-19T19:50:15.560 に答える
0

クエリの場合...

_context.Category
        .Where(x => x.ParentCategory == null)
        .OrderBy(x => x.SortOrder)
        .ToList()

... 空のコレクションを返します。これは、データベース内のすべてのカテゴリにParentCategoryまたは カテゴリ テーブルが空であることを意味します。それで全部です。

このクエリの結果コレクションで...

_context.Category
        .OrderBy(x => x.SortOrder)
        .ToList()

... すべてのカテゴリに noがあるからといって、データベース内のParentCategoryすべてのカテゴリに no があるとは限りません。ParentCategory

EF を使用して関連エンティティを読み込む、または読み込まないことの基本を知っていますか? EF >= 4.1/ のこの紹介を読むことをお勧めしますDbContext: http://blogs.msdn.com/b/adonet/archive/2011/01/31/using-dbcontext-in-ef-feature-ctp5-part-6 -loading-related-entities.aspx

于 2012-07-12T22:27:54.997 に答える
0

結果では、返された結果に表示されていても、参照が実際nullにデータベースにあるとは限りませんnull

次のクエリを使用して、EF に参照データを強制的に読み込みます。

public IList<Category> GetMainCategories()
{
     return _context.Category
             .Include(x => x.ParentCategory) // for the new EF versions
             .Include("ParentCategory")      // for older EF versions
             // .Where(x => x.ParentCategory == null)
             .OrderBy(x => x.SortOrder)
             .ToList();
}

このInclude()メソッドは の動作には影響しないことに注意してください。デバッガ ウィンドウでプロパティを表示する (またはコードからアクセスする) ときに、そこにデータがあることWhereを確認するだけです。ParentCategory

于 2012-11-28T14:32:08.910 に答える