【问题标题】:How to extract data from Linq query如何从 Linq 查询中提取数据
【发布时间】:2015-01-09 05:46:46
【问题描述】:

我是实体框架的新手,谁能告诉我如何从以下查询中提取数据并将结果传递给视图。

public ActionResult Index()
    {
        var query = (from c in db.Customers
                     join b in db.Banks on c.Id equals b.CustomerId
                     join bt in db.BankTransactions on b.Id equals bt.BankId
                     where c.Id == 1
                     orderby bt.Id descending
                     select new
                     {
                         Name = c.Name,
                         Balance = bt.Balance
                     }).Take(1);

        //I want to pass Customer Name and Customer Balance to the view

        return View();
    }

【问题讨论】:

  • return View(query.ToList()); ?
  • ...并假设您的视图接受IEnumerable<dynamic> 作为模型只是return View(query.ToArray()); 否则不要使用匿名类型...
  • 你会想打电话给.ToList(),因为,延迟执行。
  • .Take(1) 如果您只想返回单个对象,可能应该是 .FirstOrDefault()
  • 是的..这个查询应该只返回单行

标签: c# asp.net linq asp.net-mvc-4 entity-framework-6


【解决方案1】:

创建视图模型

public class CustomerVM
{
  public string Name { get; set; }
  public decimal Balance { get; set; }
}

并将您的查询修改为

var query = (from c in db.Customers ...
....
select new CustomerVM
{
  Name = c.Name,
  Balance = bt.Balance
}).FirstOrDefault();

然后

return View(query);

查看

@model YourAssembly.CustomerVM
...
@Html.DisplayFor(m => m.Name)
...

【讨论】:

  • 我不只使用一个模型。您可以在代码中看到三个模型。所以我不能在视图中添加@model YourAssembly.CustomerVM,因为它只适用于一个模型。
  • 什么?您的所有代码都显示您正在将来自三个单独表的数据组合到 one 匿名对象中。我在这里所说的不是使用包含 2 个属性的匿名对象,而是使用包含这 2 个属性的视图模型,以便您可以在视图中将其用作强类型模型并显示属性。您没有使用三个模型,而是在一个模型中使用来自 3 个表的数据。
【解决方案2】:

我没有编译这段代码来检查,但要解决你的问题,你可以这样做:

        NewObject balanceInfo = query.AsEnumerable().Select(p => new NewObject
        {
            CostumerName = p.Name,
            CostumerBalance = p.Balance
        });

当我的方法返回列表时,我经常这样做。正如我所说,我没有进行查询并编译测试,但我相信这应该可以解决您的问题。

【讨论】:

    猜你喜欢
    • 2011-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多