【问题标题】:Explanation of the usage of it. while using ObjectSet<>.Where()说明它的用法。使用 ObjectSet<>.Where()
【发布时间】:2015-03-15 16:59:04
【问题描述】:

我有以下一段运行良好的代码:

ObjectContext octx = new ObjectContext("name=PublisherModelContainer");
        ObjectSet<Author> authorSet = octx.CreateObjectSet<Author>();
        ObjectQuery<Author> q = authorSet.Where("it.FirstName == @FirstName", new ObjectParameter("FirstName", "Isaak"));
        Author a = q.FirstOrDefault();
        if (a == null) 
        { 
            Console.WriteLine("Author not found");
            return;
        }
        Console.WriteLine("{0} {1}", a.FirstName, a.LastName);

在调用“Where”方法时,FirstName 属性通过“it.FirstName”被引用。这是什么意思?我尝试使用不同的别名,例如“a.FirstName”,但失败并出现异常消息“a.FirstName”无法在当前范围或上下文中解析。

即使在此处的 Microsoft 示例 (https://msdn.microsoft.com/en-us/library/bb338811%28v=vs.110%29.aspx) 中,it.ProductID 也被使用,而不是 t.ProductID。

“它”到底是什么?难道“它”有特殊的含义?

【问题讨论】:

    标签: c# entity-framework entity-framework-6 where-clause objectset


    【解决方案1】:

    It 正是您可以参考当前正在使用的集合的方式。与 C# 类中的 this 相同。但这是基于 EF 生成的查询来实现的。 考虑以下 SQL 脚本。

    SELECT Col1, Col2, Col3 FROM Table AS It
    WHERE It.Col1 = @param1
    

    这里有更详细解释的链接http://www.w3schools.com/sql/sql_alias.asp

    【讨论】:

    • 非常感谢。我发现在任何 EF 文档中都没有特别提到“它”,这有点令人惊讶。 'this' 是每本 C++ 书籍或例如这里 (en.cppreference.com/w/cpp/keyword) 中提到的一个非常知名的语言关键字,但是 'it'..?
    • SQL 中没有这样的关键字,他们 (EF) 只是尝试通过使用表别名来实现相同的概念。这个概念只在 EF 世界中有效,密切关注生成的查询会是什么样子:)。设身处地为他们着想,如果您必须生成查询的 SELECT 部分,您将如何公开可用的内容以便您的库的用户可以提供 WHERE 部分?
    • 这是可以理解的,只是我希望在某处清楚地记录“it”的用法以及“it”的含义。到目前为止,我还没有找到任何东西。由于它看起来像一个别名,开发人员会倾向于用他们喜欢的任何名称替换,就像他们在 SQL 中所做的那样,但这不起作用,必须使用“it”。
    猜你喜欢
    • 1970-01-01
    • 2013-01-23
    • 2017-05-28
    • 2019-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-06
    相关资源
    最近更新 更多