将Linq to Entity结果直接获取到Datatable中

时间:2013-09-12 03:23:20

标签: c# linq entity-framework datatable

我正在尝试使用 Linq和实体制作动态菜单。我想直接将查询结果添加到datatable中。 select查询(如下所示)抛出异常。 例外:

  

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));

1 个答案:

答案 0 :(得分:2)

您无法调用无法翻译成SQL query的方法,您应该按照以下两个步骤进行操作:

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);