2015-02-05 4 views
2

let 'say у меня есть таблица комментариев, Администратор и участник могут прокомментировать это. Администратора и члены являются наследованием от пользователя, , так что теперь я хочу, чтобы получить комментарий и фильтр специфических свойств элемента (Groupname)Entity Framework 6 литой объект наследования при выполнении where where

public class User 
{ 
    [Key] 
    public int id { get; set; } 
    public string name { get; set; } 
    public string type { get; set; } //member or admin 
} 
public class Admin : User 
{ 
    public string someProp { get; set; } 
} 
public class Member : User 
{ 
    public string groupName { get; set; } 
} 
public class Comment 
{ 
    [Key] 
    public int id { get; set; } 
    public string msg { get; set; } 
    [ForeignKey("user")] 
    public int user_id { get; set; } 

    public virtual User user { get; set; } 
} 

var comments = db.comments.Where(c => c.user.type == "member" && c.user.groupName == "abc").ToList(); 

конечно выше кода не может работать, поэтому любая идея для меня ?

ответ

2

Попробуйте это:

var comments = db.comments.Where(c => 
    c.user is Member && 
    (c.user as Member).groupName == "abc" 
); 

Кроме того, если вы будете подвергать другой конец ассоциации (User -> Комментарии), это может быть гораздо проще:

public abstract class User 
{ 
    [Key] 
    public int id { get; set; } 
    public string name { get; set; } 
    public string type { get; set; } //member or admin 

    public virtual ICollection<Comment> Comments { get; set; } 
} 

Тогда:

var comments = db.users 
       .OfType<Member>() 
       .Where(x => x.groupName == "abc") 
       .SelectMany(x => x.Comments); 

PS Я взял на себя смелость, чтобы отметить свой User класс как abstract.

+0

спасибо большое! Это работает i m, используя Web API 2 & OData v4. Здесь я разделяю вопрос и ответ на эту проблему «Расширьте», с которой я сталкиваюсь. URL-адрес запроса для odata будет localhost: 6663/api/comments? $ Filter = user/EFDB.Member/groupName eq 'groupA' "для кода. Не использовать isof(). ссылка: http: // www .wenda.io/questions/5079367/using-odata-function-isof-with-web-api.html – user2288974

+0

Имейте в виду, что 'user.type' избыточен, если вы уже проверяете тип, используя' is Member' или 'OfType ()'. – haim770

Смежные вопросы