2011-01-18 22 views
0

Linq-to-SQLクエリに問題がありますintを使用したLinq-to-SQL?

このリクエストを実行すると、すべて正常に動作し、正しい結果が返されます(2行)。

return _repository.GetMenus() 
       .Where(x => x.ParentId == null && x.WikiId == 1) 
       .ToList(); 

しかし、私が次のことをすれば、空のリストが得られます。

var menu = new WikiMenu(); 
menu.ParentId = null; 
return _repository.GetMenus() 
        .Where(x => x.ParentId == menu.ParentId && x.WikiId == 1) 
        .ToList(); 

menu.ParentIdが他の場合はnullですが、正常に動作します。

これはモデルWikiMenu

public class WikiMenu 
{ 
    public int? Id { get; set; } 
    public int WikiId { get; set; } 
    public int PageId { get; set; } 
    public string Title { get; set; } 
    public int Order { get; set; } 
    public int? ParentId { get; set; } 
    public List<WikiMenu> SubMenu { get; set; } 
} 

私はこれをどのように修正することができますか?このコードスニペットは、 WHERE [table0].[parentId] IS NULLいうよりWHERE [table0].[parentId] == NULLのようなものを生成するLinq2SQLを強制します

return _repository.GetMenus(). 
    Where(x => object.Equals(x.ParentId, menu.ParentId) && x.WikiId == 1).ToList(); 

は、これまでのところ私は、あなたは以下のコードを使用しようとすることができ、この小さなハック

if(menu.ParentId == null) 
    return _repository.GetMenus() 
         .Where(x => x.ParentId == null && x.WikiId == site.Id) 
         .ToList(); 
else 
    return _repository.GetMenus() 
         .Where(x => x.ParentId == menu.ParentId && x.WikiId == site.Id) 
         .ToList(); 

答えて

3

を行っています。

これが役に立ちます。

関連する問題