【问题标题】:C#/ASP.NET lambda conversionC#/ASP.NET lambda 转换
【发布时间】:2011-06-25 06:24:52
【问题描述】:

当我将它返回到我的视图时:

return View(db.Properties.ToList());

我得到 3 个属性,其中一个的位置值为“俄勒冈”。

但在另一个方法中声明如下:

public ViewResult Browse(string location)
{
        return View(db.Properties.Where(p => p.location == location).ToList());
}

我得到 0 个属性。

我怀疑字符串“位置”在某处被转换为奇怪的东西,但我不确定它会以何种方式被转换。当我用 '== "Oregon"' 替换 lambda '== location' 时,我仍然得到 0 个属性。

我该如何解决这个问题?

另外,是否可以看到为调试目的而创建的中间 SQL?

编辑:这是使用实体框架。

编辑:我现在得到的结果略有不同。看起来传入的位置字符串是空的(即使我在 URL 中看到它)。我已经重写了所有内容并将其发布在:

Passing string parameters MVC 3

【问题讨论】:

  • 你还没说你用的是哪个LINQ提供程序,这让你很难帮你调试……
  • 我相信我正在使用 Linq to Entities。可能是 Linq to SQL。对不起。我对 C#/MVC 很陌生。
  • @micahhoover:你需要找出哪个,因为它们有不同的记录方式。如果您可以发布一些代码,那将有所帮助。
  • 这是我的 using 语句: using System;使用 System.Collections.Generic;使用 System.Data;使用 System.Data.Entity;使用 System.Linq;使用 System.Web;使用 System.Web.Mvc;使用 ElkDogTrader.Models;我记得用 NuGet 安装 Entity Framework,但我没有用那种方式安装 Linq to SQL。
  • @micahhoover:是的,是 EF。

标签: asp.net-mvc-3 c#-4.0 entity-framework-4 linq-to-entities


【解决方案1】:

我无法复制 - 我尝试了以下...

    public ActionResult Index()
    {
        var db = new ORMTestEntities();
        var oneprop = db.Properties.Where(p => p.location == "Oregon").ToList();
        ViewBag.Oneprop = oneprop;
        return View(db.Properties.ToList());
    }

    public ActionResult Index2()
    {
        var db = new ORMTestEntities();
        var oneprop = db.Properties.Where(p => p.location == "Oregon").ToList();
        ViewBag.Oneprop = oneprop;
        return View("Index",db.Properties.Where(p => p.location == "Oregon").ToList());
    }

两者都按预期工作。

因此创建了一个表

CREATE TABLE [dbo].[Properties](
[Id] [int] IDENTITY(1,1) NOT NULL,
[location] [varchar](50) NULL,
[otherthing] [varchar](50) NULL,
 CONSTRAINT [PK_Properties] PRIMARY KEY CLUSTERED 
 (
[Id] ASC
 ) WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF,     ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
  ) ON [PRIMARY]

这是使用开箱即用的 EF 模型生成 - 没有 T4 模板,没有“添加代码生成项”或其他任何内容。我建议你从头开始,一次重新构建一个东西,看看哪里出了问题。

编辑:我只是添加了代码生成项“ADO.NET C# POCO Entity Generator”,结果没有变化。

要回答您问题的第二部分,为了查看数据库查询,最简单的方法是连接 EFProf http://efprof.com/ - 30 天试用版应该适合您。

【讨论】:

  • 你全力以赴试图回答这个问题。我将对其进行修补,但除非它得到解决,否则我不能将其标记为“答案”。我以为我只是在做一些愚蠢的事情。
  • (我想知道如果我在运行 lambda 表达式之前创建表会发生什么情况(就像你所做的那样)......)。
  • 我不知道。这真的是你的代码吗?大小写没有变化吗?您是否在第二个控制器方法上设置了断点并查看那里发生了什么?与其将模型返回到视图中,不如将其放入变量中并查看值是什么。在视图中放置一个断点,看看你会得到什么。并尝试 EFProf 检查生成的 SQL。
  • 您没有出现问题的原因是因为您没有将任何参数重命名为“id”以外的其他名称。如果您希望它不是“id”,则必须更改路由表。见:stackoverflow.com/questions/6863609/…
  • 哈哈 - 你的意思是根本没有设置位置?红鲱鱼!这很奇怪,因为您说“当我将 lambda '== location' 替换为 '== "Oregon"' 时,我仍然得到 0 个属性。”
【解决方案2】:

答案如下:

Passing string parameters MVC 3

由于参数没有命名为“id”,所以一切都变糟了。

【讨论】:

    猜你喜欢
    • 2020-11-07
    • 1970-01-01
    • 1970-01-01
    • 2011-02-10
    • 2020-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多