LAMBDA麻烦

时间:2017-07-17 20:17:12

标签: c# mysql asp.net lambda

为什么这不起作用?

我觉得我正在失去理智。

我正在使用带有实体框架的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

的字符串变量

1 个答案:

答案 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