所以我试图将SQL存储过程转换为Entity Framework,它使用子查询中的函数来创建临时表。有几个子查询,所以我使用LINQPad 4和.Dump()
将我的Linq输出与每个子查询的原始SQL输出进行比较(可以说是在程序中逐步)。
第一个子查询使用一个我知道返回正确值的函数(从.Dump()
比较到SQL函数)。
但是,当我尝试在子查询中使用结果List<object>
时,它会抛出一个
NotSupportedException:无法创建类型&#39; System.Object&#39;的常量值。在此上下文中仅支持原始类型或枚举类型。
我已经在Visual Studio EntityFramework项目中转换了使用此函数的其他过程,没有任何问题,使用与下面相同的实现方式。那么为什么LINQPad抛出异常并且Visual Studio编译并运行这样的东西就好了?我已尝试使用AsEnumerable()
,但它没有解决问题。
IDbDataParameter[] sqlParameters = new[]
{
new SqlParameter("@userId", 1),
new SqlParameter("@organizationId", 1),
new SqlParameter("@displayId", 0)
};
fnc_PRIV_AccessibleDisplays_List accessDisplaysList = new fnc_PRIV_AccessibleDisplays_List();
var accessibleDisplays = accessDisplaysList.Execute(sqlParameters) as List<object>;
var activeMenuItems = (from m in MENU_MenuItem
join d in PRIV_Displays on m.DisplayId equals d.Id
join ad in accessibleDisplays on d.Id equals Convert.ToInt32(ClassHelper.GetPropertyValue(ad, "Id"))
where (m.StatusId == 1)
select new
{
Id = m.DisplayId,
Name = m.Name,
DefaultName = m.Name,
Description = m.Description,
FolderId = m.FolderId,
OrderIndex = m.OrderIndex,
IconUrl = m.IconUrl,
ViewName = d.ClassName,
BackgroundColorId = m.BackgroundColorId,
IsModifiable = m.IsModifiable,
DisplayOpenMode = d.DisplayOpenMode,
iconCls = m.iconCls
}).ToList();