У меня есть пять таблиц, которые связаны какLinq выбрать пять столов вниз
Chemicals -> Ингредиенты -> Решения -> Обычаи -> Проекты
на SQL-сервере, я хочу, чтобы получить проекты данных, относятся к химическим веществам и некоторые данные промежуточных таблиц. Я могу сделать это с помощью следующего запроса (по крайней мере, в LINQPad):
from c in Chemicals
join i in Ingredients on c.Chem_ID equals i.Chem_ID into TempTab01
from tt01 in TempTab01.DefaultIfEmpty()
join s in Solutions on tt01.Sol_ID equals s.Sol_ID into TempTab02
from tt02 in TempTab02.DefaultIfEmpty()
join u in Usages on tt02.Sol_ID equals u.Sol_ID into TempTab03
from tt03 in TempTab03.DefaultIfEmpty()
join pro in Projects on tt03.Study_ID equals pro.Study_ID into TempTab04
from tt04 in TempTab04.DefaultIfEmpty()
select new
{
c_ChemID = c.Chem_ID,
c_Name = c.Name,
i_ChemID = (int?)tt01.Chem_ID,
i_Sol_id = (int?)tt01.Sol_ID,
i_IngredID = (int?)tt01.Ingred_ID,
tt01.Amount,
s_SolID = (int?)tt02.Sol_ID,
s_SolName = tt02.SolName,
u_SolID = (int?)tt03.Sol_ID,
u_StudyID = (int?)tt03.Study_ID,
pro_StudyID = (int?)tt04.Study_ID,
pro_StudyNo = tt04.StudyNo,
pro_ProjectName = tt04.ProjectName
}
Я не хочу использовать соединение, но Свойства навигации вместо этого, но я не знаю, как использовать несколько Выбери или SelectMany для бурения до более чем двух таблиц.
Я использую EF6 для получения данных с SQL Server, класс edmx для химических веществ - e. г.
public long Chem_ID { get; set; }
public string Name { get; set; }
public virtual Person Person { get; set; }
public virtual Project Project { get; set; }
public virtual ICollection<Ingredient> Ingredients { get; set; }
public virtual ICollection<Usage> Usages { get; set; }
, который имеет химический 1: м отношение к ингредиентам, ингредиенты для решения = 1: 1, Решения Usages = 1: м и Usages к проектам = 1: 1. Надеюсь, что это ответ на ваш вопрос.
Можете ли вы показать навигационные свойства? –