EF 4.1 POCO запрос - PullRequest
       1

EF 4.1 POCO запрос

1 голос
/ 13 января 2012

У меня есть этот POCO, и я хочу вернуть список пользователей в конкретной компании.

public class Company
{
    public AccreditedCompany() 
    {
        this.Branches = new HashSet<Branch>();
    }

    [Key, DatabaseGenerated(DatabaseGeneratedOption.Identity), ScaffoldColumn(false)]
    public int CompanyId { get; set; }
    public bool Active { get; set; } 

    public virtual ICollection<Branch> Branches { get; set; }         
}

public class Branch
{
    public Branch() 
    {
        this.Users = new HashSet<User>();
    }

    [Key, DatabaseGenerated(DatabaseGeneratedOption.Identity), ScaffoldColumn(false)]
    public int BranchId { get; set; }
    public int CompanyId { get; set; }
    public string Name { get; set; }
    public string ContactName { get; set; }

    public virtual Company Company { get; set;}
    public virtual ICollection<User> Users { get; set; }  
}

public class User 
{

    [Key, DatabaseGenerated(DatabaseGeneratedOption.Identity), ScaffoldColumn(false)]
    public int UserId { get; set; }
    public int BranchId { get; set; }
    public string ComputerSN { get; set; }
    public string CameraSN { get; set; }

    public virtual Branch Branch { get; set; }         
}

Это мой запрос LINQ:

var company = (from u in objDataContext.Companies.Include(c=>c.Branches.Select(v=>v.Users)) 
    where u.CompanyId == 8 select u).FirstOrDefault();

IQueryable<User> users = (from j in company.Branches select j.Users);

У меня есть ошибка компиляции во втором запросе:

Ошибка 2 Не удается неявно преобразовать тип 'System.Collections.Generic.IEnumerable>' в System.Linq.IQueryable. Явное преобразование существует (есть Вы пропустили актерский состав?)

Я хочу получить список пользователей, похожий на простой оператор SQL, такой как

SELECT dbo.Users.* FROM Branches 
INNER JOIN dbo.Users ON dbo.Branches.BranchId = dbo.Users.BranchId 
INNER JOIN dbo.Companies ON dbo.Branches.CompanyId = dbo.Companies.CompanyId
WHERE     (dbo.Companies.CompanyId = 8)

Заранее спасибо.

Ответы [ 2 ]

3 голосов
/ 13 января 2012

Ваш пользовательский запрос может быть:

IEnumerable<User> users = company.Branches.SelectMany(branch => branch.Users);

Это вернет всех пользователей в любом филиале компании.

0 голосов
/ 13 января 2012

Мне кажется, что вы могли бы просто использовать:

IQueryable<User> users = objDataContext.Users
                         .Where(u => u.Branch.CompanyId == 8);

Я заметил, что у вас есть и Company, и CompanyId на вашей Branch сущности.Это кажется избыточным, хотя и немного упрощает этот запрос.Вы должны быть в состоянии избавиться от Branch.CompanyId и User.BranchId и просто использовать ассоциации сущностей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...