Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# LINQ vs context.entity.Where()_C#_Linq_Entity Framework - Fatal编程技术网

C# LINQ vs context.entity.Where()

C# LINQ vs context.entity.Where(),c#,linq,entity-framework,C#,Linq,Entity Framework,这两个街区完全一样吗?一个比另一个有什么优势吗 using (var context = new TRANSITEntities()) { var result = context.Table1.Where(c => c.UserCode == "123"); } using (var context = new TRANSITEntities()) { va

这两个街区完全一样吗?一个比另一个有什么优势吗

        using (var context = new TRANSITEntities())
        {
            var result = context.Table1.Where(c => c.UserCode == "123");
        }


        using (var context = new TRANSITEntities())
        {
            var result = from c in context.Table1
                         where c.UserCode == "123"
                         select c;
        }
第一个选择context.Table1,第二个选择context.LINTE。所以他们从完全不同的收藏中挑选

此外,第一个选项在UserCode列上进行选择,第二个选项在CodeUsager列上进行选择。。

除此之外,第一个是第二个的翻译,你忘了翻译第二个,代码是一样的。C编译器只需将第二个查询转换为第一个查询,它们的行为将相同。

第一个查询从context.Table1中选择,第二个查询从context.LINTE中选择。所以他们从完全不同的收藏中挑选

此外,第一个选项在UserCode列上进行选择,第二个选项在CodeUsager列上进行选择。。


除此之外,第一个是第二个的翻译,你忘了翻译第二个,代码是一样的。C编译器只需将第二个查询转换为第一个查询,它们的行为将完全相同。

它们完全相同。编译器在解析任何方法之前将查询语法转换为lambda表达式版本。

它们完全相同。编译器在解析任何方法之前将查询语法转换为lambda表达式版本。

完全相同

您可以通过查看ToString来验证这一点

    string query1String, query2String;
    using (var context = new TRANSITEntities())
    {
        var result = context.Table1.Where(c => c.UserCode == "123");
        query1String = result.Expression.ToString();
    }


    using (var context = new TRANSITEntities())
    {
        var result = from c in context.Table1
                     where c.UserCode == "123"
                     select c;
        var query2String = result.Expression.ToString();
    }

    Assert.AreEqual(query1String, query2String);
还应该指出的是,结果实际上并不是一个结果。它是一个非执行/枚举IQueryable。这意味着它就像一个尚未运行的SQL语句。如果你要做

    var t1 = result.ToArray()
    var t2 = result.ToArray()
然后该查询将实际执行两次。t1和t2是内存数组中的实际结果…而不是结果。换句话说,结果实际上应该命名为query,而且,上面的示例永远不会起作用……因为如果在using块之外对结果调用ToArray,它将失败……因为一旦释放了上下文,就无法运行查询:

    using (var context = new TRANSITEntities())
    {
        var result = context.Table1.Where(c => c.UserCode == "123");
    }
    // throws exception:
    var array = result.ToArray();
完全一样

您可以通过查看ToString来验证这一点

    string query1String, query2String;
    using (var context = new TRANSITEntities())
    {
        var result = context.Table1.Where(c => c.UserCode == "123");
        query1String = result.Expression.ToString();
    }


    using (var context = new TRANSITEntities())
    {
        var result = from c in context.Table1
                     where c.UserCode == "123"
                     select c;
        var query2String = result.Expression.ToString();
    }

    Assert.AreEqual(query1String, query2String);
还应该指出的是,结果实际上并不是一个结果。它是一个非执行/枚举IQueryable。这意味着它就像一个尚未运行的SQL语句。如果你要做

    var t1 = result.ToArray()
    var t2 = result.ToArray()
然后该查询将实际执行两次。t1和t2是内存数组中的实际结果…而不是结果。换句话说,结果实际上应该命名为query,而且,上面的示例永远不会起作用……因为如果在using块之外对结果调用ToArray,它将失败……因为一旦释放了上下文,就无法运行查询:

    using (var context = new TRANSITEntities())
    {
        var result = context.Table1.Where(c => c.UserCode == "123");
    }
    // throws exception:
    var array = result.ToArray();

如果您试图从不同的表中进行选择,则情况不同

但是如果表是相同的,那么只是表示不同而已

没有区别,这只是您喜欢哪种编码方式的偏好


在创建sql表示之前,所有linq查询都将转换为Lambda。

如果您试图从不同的表中进行选择,则它是不同的

但是如果表是相同的,那么只是表示不同而已

没有区别,这只是您喜欢哪种编码方式的偏好


在创建sql表示之前,所有linq查询都将转换为Lambda。

摘自Julia Lermans的《编程实体框架:

MSDN文档中说,“一般来说,我们建议使用查询语法 因为它通常更简单,可读性更强;但是,没有 方法语法和查询语法之间的语义差异。”* 因此,使用其中一个是一个风格和个人的问题 选择


Julia Lermans的书《编程实体框架》中:

MSDN文档中说,“一般来说,我们建议使用查询语法 因为它通常更简单,可读性更强;但是,没有 方法语法和查询语法之间的语义差异。”* 因此,使用其中一个是一个风格和个人的问题 选择