Как я могу записать запись запроса в таблицу с parentID с условием parentID == 0 и ID!= (ParentID)
Здесь я запрос LINQ, чтобы получить запись в меню таблицы с условием: parentID == 0(получить корневое меню) и ID!= (Список parentID) (который является списком родительских идентификаторов, является идентификатором записи меню, имеющей child), я просто Загрузка всех записей включает в себя корневое меню, в котором нет дочерней записи и дочерней записи:
List<Menu> menus = MenuDAO.Instance.GetAll(); // Get All Record in Menu Table
var parentID = (from p in menus where p.ParentID != 0 select new {p.ParentID}).Distinct(); // Get unique ParentID in Menu Table
List<int> numParentID = new List<int>();
foreach (var a in parentID)
{
numParentID.Add(a.ParentID);
} // assign to a list <int>
this.ddlMenu.DataSource = from m1 in menus
where !(numParentID).Contains((int)m1.ID) && m1.ParentID == 0
select new { m1.ID, m1.Name };
this.ddlMenu.Databind();
И я запускаю этот код, я отображаю записи, которые не имеют детей, не отображают записи детей. Кто-нибудь, помогите мне это исправить. Мой новый в LINQ, большое спасибо.
Результат, как я ожидаю здесь: список записей, которые не имеют дочерних элементов, моя схема таблицы меню: ID, имя, порядок, ParentID.
1 ответ
Предложения
1-Вам не нужно выбирать анонимный объект при первом выборе, вы можете написать как
var parentIDs = (from p in menus
where p.ParentID != 0
select p.ParentID).Distinct();
всегда хорошая практика называть коллекции множественным числом (parentIDs
)
2-Нет необходимости повторять, чтобы создать new List<>
Таким образом, вы можете написать все из них в одном запросе
List<int> numParentIDs = (from p in menus
where p.ParentID != 0
select p.ParentID).Distinct().ToList();
Ответ: сначала выберите все идентификаторы детей уровня листа. Получить все идентификаторы, кроме значений в столбце ParentID. А затем сделайте выбор из меню, присоединившись к leafID
var leafMenuIDs = menus
.Select(m => m.ID)
.Except(menus.Select(m => m.ParentID).Distinct())
.Distinct();
this.ddlMenu.DataSource = from m in menus
join id in leafMenuIDs on m.ID equals id
select new { m.ID, m.Name };