【问题标题】:Show LINQ joined table column at view DisplayNameFor在视图 DisplayNameFor 中显示 LINQ 连接表列
【发布时间】:2015-10-14 20:55:32
【问题描述】:

我正在尝试使用来自我数据库中不同表的数据创建一个列表视图。跟随你有我尝试过的:

我创建了一个 LINQDataContex 并引用了我的表之间的关联。

Dbml File

这会自动在我的 Designer.cs 文件中的表类中创建 EntitySets,如下所示:

[global::System.Data.Linq.Mapping.AssociationAttribute(Name="tblfLeaseDetail_tblvVendor", Storage="_tblvVendors", ThisKey="Vendor_ID", OtherKey="Vendor_ID")]
    public EntitySet<tblvVendor> tblvVendors
    {
        get
        {
            return this._tblvVendors;
        }
        set
        {
            this._tblvVendors.Assign(value);
        }
    }

然后我在控制器中创建了一个查询来选择信息并将其返回到我的视图中:

public ActionResult Leases()
    {
        LeasesLINQDataContext leases = new LeasesLINQDataContext();
        var leaseList = (from l in leases.tblfLeaseDetails
                         join a in leases.tblfAuthorizations on l.Lease_Detail_ID equals a.Lease_Detail_ID                             
                         join c in leases.tblvCounties on l.County_ID equals c.County_ID
                         join t in leases.tblvLineTypes on l.Line_Type_ID equals t.Line_Type_ID
                         join v in leases.tblvVendors on l.Vendor_ID equals v.Vendor_ID
                         select new {l.Lease_Detail_ID, l.Lease_ID, l.XRef_Lease_ID, v.Vendor_Name, l.Description, c.County,
                         l.Amount, l.Payment_Due_Date, a.Authorized, t.Line_Type }).ToList();

        ViewBag.Message = "Your app description page.";

        return View(leaseList);
    }

最后我试图通过这段代码在我的视图中显示数据,但没有成功:

@model IEnumerable<LMWEB_MVC.tblfLeaseDetail> 

@{
ViewBag.Title = "Leases";
}

<h2>Leases</h2>

<p>
@Html.ActionLink("Create New", "Create")
</p>
<table>
<tr>
    <th>
        @Html.DisplayNameFor(model => model.Lease_ID)
    </th>
    <th>
        @Html.DisplayNameFor(model => model.XRef_Lease_ID)
    </th>
    <th>
        @Html.DisplayNameFor(model => model.Lease_Type)
    </th>
    <th>
        @Html.DisplayNameFor(model => model.Company_ID)
    </th>
    <th>
        @Html.DisplayNameFor(model => model.Vendor_Name)
    </th>

这会返回以下错误:

'System.Collections.Generic.IEnumerable<LMWEB_MVC.tblfLeaseDetail>' does not contain a definition for 'Vendor_Name' and no extension method 'Vendor_Name' accepting a first argument of type 'System.Collections.Generic.IEnumerable<LMWEB_MVC.tblfLeaseDetail>' could be found (are you missing a using directive or an assembly reference?)

请让我知道我做错了什么。非常感谢!

【问题讨论】:

    标签: c# .net linq join razor


    【解决方案1】:

    看起来您的视图模型类型错误。您的查询未返回 tblfLeaseDetail 对象。它返回一个您在查询的选择部分创建的新的匿名对象。

    我建议创建一个包含所有您需要的属性的新类(可能称为 LeaseViewModel)。然后,更改您的查询以返回它而不是它现在返回的匿名类型。

    您可以通过更改让您的查询返回您的视图模型:

    select new {l.Lease_Detail_ID, l.Lease_ID, l.XRef_Lease_ID, v.Vendor_Name, l.Description, c.County,
                         l.Amount, l.Payment_Due_Date, a.Authorized, t.Line_Type }
    

    类似于:

    select new LeaseViewModel() { Detail_ID = l.Lease_Detail_ID, Lease_ID = l.Lease_ID, XRef_Lease_ID = l.XRef_Lease_ID, Vendor_Name=v.Vendor_Name, Description = l.Description, County = c.County, Amount = l.Amount, Payment_Due_Date = l.Payment_Due_Date, Authorized = a.Authorized, Line_Type = t.Line_Type }
    

    【讨论】:

    • 杰森,非常感谢您的回答!我按照你的建议做了,但现在leaseList 无法接收查询,因为VS 无法将Anonymous 类型转换为LeaseViewModel。当您说“更改查询以返回它”时,您的意思是将我的变量类型更改为 LeaseViewModel,对吧?
    • 看起来我在这个链接上找到了解决方案:codeproject.com/Articles/38635/…
    • 我添加了一个选择 LeaseViewModel 对象而不是匿名类型的示例。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-04
    • 2013-12-14
    • 2013-05-18
    相关资源
    最近更新 更多