将 Linq 提取到实体结果直接到数据表中

本文关键字:数据表 实体 Linq 提取 结果 | 更新日期: 2023-09-27 18:31:04

我正在尝试使用 Linq 和实体制作动态菜单。我想将查询结果直接添加到数据表中。选择"查询"(如下所示)将引发异常。例外:

LINQ to Entities 无法识别方法"System.Data.DataRow LoadDataRow(System.Object[], Boolean)' 方法,并且此方法不能 翻译成商店表达式

有没有其他选择?下面是我的代码。

DataTable dtMenu = new DataTable();
dtMenu.Columns.Add("MenuName", typeof(string));
dtMenu.Columns.Add("SubMenuName", typeof(string));
dtMenu.Columns.Add("FileName", typeof(string));
var menuItems = (from vUser in dbMenu.VirtualUserMenuMaps
join menu in dbMenu.MenuMasters on vUser.MenuId equals menu.MenuId
join subMenu in dbMenu.SubMenuMasters on vUser.SubMenuId equals subMenu.SubMenuId
where vUser.VirtualId == virtualId
orderby menu.MenuId, subMenu.DisplayOrder
select dtMenu.LoadDataRow(
new object[] { menu.MenuName, subMenu.SubMenuName, subMenu.FileName }, false));

将 Linq 提取到实体结果直接到数据表中

你不能调用一个不能翻译成SQL query的方法,你应该分 2 个步骤完成,如下所示:

var menuItems =  from vUser in dbMenu.VirtualUserMenuMaps
                 join menu in dbMenu.MenuMasters on vUser.MenuId equals menu.MenuId
                 join subMenu in dbMenu.SubMenuMasters on vUser.SubMenuId equals subMenu.SubMenuId
                 where vUser.VirtualId == virtualId
                 orderby menu.MenuId, subMenu.DisplayOrder
                 select new { menu.MenuName, subMenu.SubMenuName, subMenu.FileName };
foreach(var row in menuItems)
    dtMenu.LoadDataRow(new object[]{row.MenuName, row.SubMenuName, row.FileName}, false);