我们可以在不使用模型的情况下在视图中显示linq结果

时间:2016-06-06 08:01:49

标签: asp.net-mvc entity-framework linq

我试图显示没有模型的结果(CLASS),我已经有一个部门和Employee类,现在要显示他们的连接结果我不想创建另一个包含EmpName和Department Name属性的类。

IN MODEL

(11+1+4 bits or 4+7+1+4 bits = 16 bits)

IN CONTROLLER

 public class EmpDetails
    {     
        public int EmpID { get; set; }
        public string Name { get; set; }
        public string Email { get; set; }
         public int DepartmentID { get; set; }
}
 public class Department
{
        public int DepartmentID { get; set; }
        public string DepartmentName { get; set; }
        public string Location { get; set; }
}

视图

  

ERROR ::'object'不包含'Name'的定义

  var q = (from ED in cc.EmpDetails
join DT in cc.Department
on ED.DepartmentID equals DT.DepartmentID
select new {
ED.Name,
DT.DepartmentName
});

ViewBag.ListData = q;

我希望不使用模型

来完成

3 个答案:

答案 0 :(得分:0)

您可以选择值作为字符串数组。

CONTROLLER - 记得在最后一行使用ToList():

var q = from ED in cc.EmpDetails
        join DT in cc.Department
        on ED.DepartmentID equals DT.DepartmentID
        select new { ED.Name, DT.Departmentname };

ViewBag.ListData = (from l in select new string[] { Name, Departmentname}).ToList();

然后在您的视图中使用数组索引引用您的值。

查看:

foreach (string[] item in ViewBag.ListData)
    {
        <div>
            @item[0]
        </div> 
     <div>
            @item[1]
        </div> 
    }

答案 1 :(得分:0)

你有什么特别的理由不想使用模特吗?您可以尝试使用ViewModel,它仍然像模型一样,但是当您要在视图上显示特定数据时,它会被使用。您可以像这样编写Department and Employment类的表示

<强>视图模型:

    public class DepartmentEmploymentViewModel
    {
        public string departmentName { get; set; }
        public string employmentName { get; set; }
    }

<强>控制器:

var q = (from ED in cc.EmpDetails
join DT in cc.Department
on ED.DepartmentID equals DT.DepartmentID
select new {
ED.Name,
DT.DepartmentName
});

//collection of department and employment name
List<DepartmentEmploymentViewModel> dpVM = new List<DepartmentEmploymentViewModel>();

dpVM = q;

查看:

@model projName.Models.DepartmentEmploymentViewModel 
foreach (var item in Model)
        {
            <div>
                @item.Name
            </div> 
            <div>
                @item.DepartmentName
            </div> 
        }

答案 2 :(得分:0)

你可以试试这样的事情

@model dynamic

<h1>List of Customers</h1>
<div>
  @foreach(var item in Model.Customers)
  {
    <h2>@item.CustomerID</h2>
  }
</div>

示例查询

var query = from c in db.Customers
        join o in db.Orders
        on c.CustomerID equals o.CustomerID
        orderby c.CustomerID ascending
        select new { 
            c.CustomerID,
            c.CompanyName,
            o.OrderID,
            o.OrderDate 
        };

在这里,您没有选择客户对象(选择c)。

您正在创建一个具有四个属性的匿名类型 - CustomerID,CompanyName,OrderID和OrderDate。虽然这个LINQ查询没有任何问题。

  

但您无法将匿名类型传递给ASP.NET MVC视图。

推荐的解决方案,但您需要再创建一个额外的类。如果您希望由于某种原因避免这样做,这里也是ExpandoObject。

  

您可以将实现的数据存储在ExpandoObject中,然后传递它   观点。

public ActionResult Index()
{
    NorthwindEntities db=new NorthwindEntities();

    dynamic model = new ExpandoObject();
    model.Customers = db.Customers.ToList();
    model.Orders = db.Orders.ToList();
    return View(model);
}

查看更多详情here