Как написать подзапрос в Entity Framework, используя Linq - PullRequest
0 голосов
/ 21 декабря 2011

Привет, я хочу это в рамках LINQ Entity .......

select Empame,EmpSalary,EmpDepartment,(select CountryName from Countries c where c.ID = Employees.EmpCountry) as Country,(select StateName from dbo.States c where c.ID = Employees.EmpState)as States from Employees

Я попробовал это. Его ошибка. Введите код здесь

    public ActionResult Index()
    {
    var Employee = (from e in _db.Employee
    select new 
    {
    Empame = e.Empame,
    EmpSalary = e.EmpSalary,
    EmpDepartment = e.EmpDepartment,
    EmpCountry = (from c in _db.Country
    where (c.ID.ToString() == e.EmpCountry)
    select c),
    EmpState = (from s in _db.States
    where (s.ID.ToString() == e.EmpState)
    select s)});
    return View(Employee);
}

Невозможно неявно преобразовать тип 'System.Linq.IQueryable' в 'строку'

Ответы [ 2 ]

0 голосов
/ 26 декабря 2011

Похоже, вы пытаетесь вернуть нематериальный запрос.Попробуйте добавить .Single(), .FirstOrDefault() и т. Д.:

var Employee = (from e in _db.Employee
    select new 
    {
    Empame = e.Empame,
    EmpSalary = e.EmpSalary,
    EmpDepartment = e.EmpDepartment,
    EmpCountry = (from c in _db.Country
    where (c.ID.ToString() == e.EmpCountry)
    select c),
    EmpState = (from s in _db.States
    where (s.ID.ToString() == e.EmpState)
    select s)}).FirstOrDefault();
0 голосов
/ 21 декабря 2011
from e in Employees 
from c in Countries
from s in States
where c.ID == e.EmpCountry
where s.ID == e.EmpState
select new {
    EmpName = e.EmpName,
    EmpSalary= e.EmpSalary,
    EmpDepartment= e.EmpDepartment,
    Country = c.Single(),
    State = s.Single()
}

НО лучший способ сделать так, чтобы ваша модель имела свойства навигации по таблицам Страна и Состояние. Если вы сгенерируете файл EDMX из БД с внешними ключами, свойства навигации будут созданы автоматически. Это будет означать, что вы просто сможете использовать:

from e in Employees.Include(em=>em.Country).include(em=>em.State)
select e;

Фактическая ошибка, которую вы получаете, заключается в том, что ваше представление ожидает строку, а не IQueriable. Чтобы изменить это, убедитесь, что вы указали тип модели в представлении

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