2013-09-12 1 views
2

Я пытаюсь сделать динамическое меню с помощью Linq и entity. Я хочу добавить результат запроса непосредственно в datatable. select (как показано ниже) выдает исключение. Исключение:Fetch Linq to Entity результат непосредственно в Datatable

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

ответ

2

Вы не можете вызвать метод, который не может быть переведен на 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);