我将类型var转换为List<SubToSubMenu>
时遇到问题。
首先,我从数据库中选择确定的数据!我收到的数据带有var
变量,但无法将var
类型转换为List<SubToSubMenu>
数据类型。
这是我的LINQ语句:
var ss =
db
.SubToSubMenus
.Join(
db.MenuPermissions,
s => s.ID,
p => p.SubToSubMenuId,
(s, p) => new { s, p })
.Where(w => w.s.Active == true && w.p.RoleId == roleId && w.p.hasPermission == true)
.Select(s => new
{
ID = s.s.ID,
SubToSubMenuName = s.s.SubToSubMenuName,
Description = s.s.Description,
})
.ToList();
这是SubToSubMenu
类:
[Table("SubToSubMenus")]
public class SubToSubMenu : AceEntityBase
{
public SubToSubMenu()
{ }
[Key]
public string ID { get; set; }
public string SubToSubMenuName { get; set; }
public string Description { get; set; }
public string SubMenuID { get; set; }
}
答案 0 :(得分:2)
<div id="profil" class="container-fluid">
<div class="row">
<div class="span12 text-center">
<div class="headline">
<p class="header">
<span>
QUI SUIS-JE ?
</span>
</p>
<h1>MON PROFIL</h1>
</div>
</div>
</div>
</div>
<div id="competences" class="container-fluid">
<div class="row">
<div class="span12 text-center">
<div class="headline">
<p class="header2">
<span>
MES COMPÉTENCES
</span>
</p>
<h1>MES COMPÉTENCES</h1>
</div>
</div>
</div>
</div>
</body>
</html>
不是一种类型,它是语法糖。您有一个匿名类型,该类型与您的var
类型没有任何关系。
不是投影到匿名类型:
SubToSubMenu
投影到您想要的类型中
.Select(s => new { ... })
答案 1 :(得分:2)
您不需要在这里投影。您已经从数据库中选择了SubToSubMenu
,因此以后无需在表达式链中“重新创建”该类。
var ss =
db
.SubToSubMenus
.Join(
db.MenuPermissions,
s => s.ID,
p => p.SubToSubMenuId,
(s, p) => new { s, p })
.Where(w => w.s.Active == true && w.p.RoleId == roleId && w.p.hasPermission == true)
到目前为止,这很好。您已加入两个表并应用了正确的过滤器。
.Select(s => new
{
ID = s.s.ID,
SubToSubMenuName = s.s.SubToSubMenuName,
Description = s.s.Description,
})
.ToList();
好,到此为止。如果此查询的最终目标是仅选择SubToSubMenu
个实体,则可以将该部分替换为
.Select(s => s.s);
...并且忽略其余的后续语句。
但是,您还可以更进一步,使EF配置中的SubToSubMenu
和MenuPermissions
实体之间的关联隐式,因此您无需.LINQ。鉴于此,最终查询应类似于:
var ss = db.SubToSubMenus
.Where(stsm => stsm.Active
&& stsm.MenuPermissions.RoleId == roleId
&& stsm.MenuPermissions.HasPermission);
答案 2 :(得分:1)
尝试一下:
.Select(s => new SubToSubMenu { ... })
我在查询末尾添加了一个简单的投影。这是为了使代码与开始时的代码尽可能接近,并有助于将来进行任何重构。
在这种情况下,可以肯定地将其编码为单个投影。