为什么这不起作用?
我觉得我正在失去理智。
我正在使用带有实体框架的asp.net核心。我的控制器中的此代码无效。我只想返回ParentOrgLevel在开头包含0001的ChildLans。
模型
public class CORP_MatrixPositionOLDWay
{
public int ID { get; set; }
public string ParentLAN { get; set; }
public string ChildLAN { get; set; }
public string ChildOrgLevel { get; set; }
public string ParentOrgLevel { get; set; }
}
查看
model IEnumerable<Certifications.Models.CORP_MatrixPositionOLDWay>
@{
ViewData["Title"] = "Index";
}
<h2>Index</h2>
<p>
<a asp-action="Create">Create New</a>
</p>
<table class="table">
<thead>
<tr>
<th>
@Html.DisplayNameFor(model => model.ParentOrgLevel)
</th>
<th></th>
</tr>
</thead>
<tbody>
@foreach (var item in Model) {
<tr>
<td>
@Html.DisplayFor(modelItem => item.ParentOrgLevel)
</td>
<td>
<a asp-action="Edit" asp-route-id="@item.ID">Edit</a> |
<a asp-action="Details" asp-route-id="@item.ID">Details</a> |
<a asp-action="Delete" asp-route-id="@item.ID">Delete</a>
</td>
</tr>
}
</tbody>
</table>
控制器
public async Task<IActionResult> Index()
{
var ParentORG = _context.CORP_MatrixPositionOLDWay
.Where(i => i.ParentLAN == UserInformation.Globals.LANID)
.Select(i => i.ParentOrgLevel);
return View(ParentORG);
}
UserInformation.Globals.LANID是机器LANID
的字符串变量答案 0 :(得分:1)
您遗失了Where()
中的lambda,如果您想要更具体,也可以使用StartsWith()
代替Contains()
:
var list = _context.CORP_MatrixPositionOLDWay
.Where(x => x.ParentOrgLevel.StartsWith("0001"))
.Select(x => x.ChildLAN);
鉴于您的最新修改
您的视图需要IEnumerable<Certifications.Models.CORP_MatrixPositionOLDWay>
您的操作必须返回包含该类型的视图作为模型:
public async Task<IActionResult> Index()
{
var ParentORG = _context.CORP_MatrixPositionOLDWay
.Where(i => i.ParentLAN == UserInformation.Globals.LANID);
return View(ParentORG);
}
如果您希望视图仅包含ChildLAN
属性(如下面评论中所示),那么您必须将视图的模型调整为IEnumerable类型。但请记住,通过执行此操作,您将丢失视图的所有其他功能(因为它依赖于CORP_MatrixPositionOLDWay
类的其他属性。您可能要做的是创建一个名为{{1}的新类或类似的东西。并且它包含你需要的东西:
IndexViewModel