C# 如何在SQL Server中将C Linq转换为查询?

C# 如何在SQL Server中将C Linq转换为查询?,c#,sql-server,linq,tsql,C#,Sql Server,Linq,Tsql,我是一名初级开发人员,正在尝试将以下linq语句转换为T-SQL: var items = from u in DataContext.Users_SearchUsers(searchPara.UserFirstName, searchPara.UserLastName, searchPar

我是一名初级开发人员,正在尝试将以下linq语句转换为T-SQL:

var items = from u in DataContext.Users_SearchUsers(searchPara.UserFirstName,
                                                    searchPara.UserLastName,
                                                    searchPara.UserEmailAddress,
                                                    fetchOptions.page,
                                                    fetchOptions.rp,
                                                    fetchOptions.sortname,
                                                    fetchOptions.sortorder)
                                 .ToList()
            join a in DataContext.UserAccesses
                                 .Where(x => x.Access.AccessTypeId == 4).ToList() on u.UserID equals a.UserId into accessGroup
            select new {};

有人能帮我吗?进入accessGroup-->非常重要

首先,您需要了解数据的来源。您一方面从Users\u SearchUsers加载信息,另一方面从UserAccess加载信息。第一个查询看起来像

select <somecolumns>
from users
where <somefilters>;
让我们加入两个:

select <someoutercolumns>
from
(
select <someinnercolumns>
from users
where <somefilters>
) t1
join
(
select <someotherinnercolumns>
from user_accesses
where access_type_id = 4
) t2
on t1.user_id = t2.user_id;
这些查询可能不是您需要的确切解决方案,但您希望答案得到改进,然后改进您的问题

如果LINQ查询非常慢,则该要求是有意义的。在这种情况下,您需要按照以下方式重构它:

select <somecolumns>
from users
join user_accesses
on users.user_id = user_accesses.user_id and user_accesses.access_type_id = 4
where <somefilters>;
您可以使用此代码

select *(you can put your columns instead *)
from Users
join UserAccesses
on Users.userid = UserAccesses.userid
where UserAccesses.typeid = 4;

为什么要手动将其转换为SQL?类似于包的实体框架可以在后台实现这一点?DataContext类已经暗示类似于库的实体框架。生成的查询记录在控制台中,您可以使用它作为起点您可以在执行链接代码之前放置断点,获取查询的txt,或设置sql server profiller以监控来自代码或应用程序的查询,您可以使用第三方应用程序来分析查询此应用程序是ef ProfillerPart,来自上面的有用注释,您的代码太粗略,无法进行任何认真的工作。fetchOptions从何而来?如果fetchOptions是本地的,那么它怎么可能被转换成SQL呢?join…into在LINQ中没有直接的SQL等价物。这是一个群组加入。但是,可以在左连接后使用GROUPBY在SQL中创建类似的内容。
select *(you can put your columns instead *)
from Users
join UserAccesses
on Users.userid = UserAccesses.userid
where UserAccesses.typeid = 4;