Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/293.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查询转换为SQL查询以获得更好的性能_C#_Sql_Sql Server_Linq_Tsql - Fatal编程技术网

C# 通过使用联接将LINQ查询转换为SQL查询以获得更好的性能

C# 通过使用联接将LINQ查询转换为SQL查询以获得更好的性能,c#,sql,sql-server,linq,tsql,C#,Sql,Sql Server,Linq,Tsql,我想提高我的查询性能。当你看我前面的问题时,你会看到我的问题。我请求您修改我的LINQ查询。因为我需要更好的表现 但是我决定为我的LINQ查询研究SQL的相等性。因此,如何在考虑性能问题的情况下将低于LINQ的代码转换为SQL?因为我需要有更好的表现,这就是原因;这比以前更重要。愿意回答这个问题的人必须专注于 更好的性能 SQL平等 data.ForEach(x=> { foreach(x.SalesItems中的var项) { if(orderItemType.Any(y=>y==item.V

我想提高我的查询性能。当你看我前面的问题时,你会看到我的问题。我请求您修改我的LINQ查询。因为我需要更好的表现

但是我决定为我的LINQ查询研究SQL的相等性。因此,如何在考虑性能问题的情况下将低于LINQ的代码转换为SQL?因为我需要有更好的表现,这就是原因;这比以前更重要。愿意回答这个问题的人必须专注于

  • 更好的性能
  • SQL平等
  • data.ForEach(x=>
    {
    foreach(x.SalesItems中的var项)
    {
    if(orderItemType.Any(y=>y==item.Value))
    {
    var x=DbContext.Set()
    .包括(q=>q.Table1)
    .包括(q=>q.Table2)
    .FirstOrDefault(q=>q.Id==item.Key);
    如果(x!=null)
    {
    var y=DbContext.Set()
    .Include(q=>q.OrderDetail)
    .FirstOrDefault(q=>q.PNRId==x.PNRId);
    x、 OrderNo=x.OrderNumber;
    x、 CustomerName=x.Table1.Name+“”+x.Table1.Name;
    x、 OrderProviderName=y.OrderDetail.Id;
    x、 城市代码=y.OriginCityCode+“-”+y.DestinationCityCode;
    }
    }
    }
    });```
    
    我没有直接回答您的问题,但是在SQL Server下优化查询的一个技巧是使用分析“缺失索引”,一个好的索引可以使查询运行速度加快两倍

    获取SQL字符串并将其复制到SQL Server Management Studio中,使用图标“显示估计的执行计划”运行查询

    在此之后,如果您的查询需要创建一个索引,您将看到类似以下内容的绿色内容:

    单击菜单“缺少索引详细信息”,并使用新名称undex执行索引


    您将看到更好的性能,每次在项目中执行查询时都要检查这是一个提示。

    这是为什么?您尝试过.ToString()吗?它将返回将在数据源上运行的命令优化linq查询比将其重写为老式sqlI更好。为了得到更好的答案,我简化了我的问题。比你强。
    data.ForEach(x =>
    {
        foreach (var item in x.SalesItems)
        {
            if (orderItemType.Any(y => y == item.Value))
            {
                var x = DbContext.Set<Customer>()
                                .Include(q => q.Table1)
                                .Include(q => q.Table2)
                                .FirstOrDefault(q => q.Id == item.Key);
                if (x != null)
                {
                    var y = DbContext.Set<Order>()
                                    .Include(q => q.OrderDetail)
                                    .FirstOrDefault(q => q.PNRId == x.PNRID);
    
                    x.OrderNo = x.OrderNumber;
                    x.CustomerName = x.Table1.Name + " " + x.Table1.Surname;
                    x.OrderProviderName = y.OrderDetail.Id;
                    x.CityCode = y.OriginCityCode + " - " + y.DestinationCityCode;
                }
            }
        }
    });```