什么相当于Linq中的“SELECT SYSTEM_USER”

时间:2012-03-04 06:26:24

标签: c# sql-server linq tsql linq-to-sql

我可以使用SYSTEM_USER值获取当前登录的SQL Server用户的身份,但有没有办法通过以某种方式执行此操作?我正在寻找类似下面的内容:

var query = from u in dataContext.Users
            where u.domainname == dataContext.system_user
            select u.fullname;

使用Environment.UserName之类的东西在非域用户通过VPN进行身份验证的情况下不起作用,并且通过单独的语句进行查询是不可取的,因为我只想使用一个语句来获取数据。

3 个答案:

答案 0 :(得分:4)

调用系统函数可以通过在数据库中创建可以在ORM中进一步映射的新函数来完成。这取决于有关映射用户数据库功能的ORM功能。

CREATE FUNCTION dbo.fnSystemUser () returns varchar(120)
AS
BEGIN
    return (select SYSTEM_USER)
END

LINQ2SQL和EF将为以下LINQ查询创建单个SQL语句。

var query = from u in dataContext.Users
            where u.domainname == dataContext.fnSystemUser()
            select u.fullname;

答案 1 :(得分:0)

LINQ本身对您的数据库一无所知,所以没有。如果您正在讨论LINQ 2实体(正如代码示例中的某些关键字所暗示的那样),您可以使用显式SQL语句中的ExecuteQuery重载之一(或其中一个亲属)。

作为替代方案,您可以解析连接字符串以获取用户登录详细信息。我相信如果您不使用Windows身份验证,SqlConnectionStringBuilder类应该能够告诉您用于连接数据库的用户的用户名和密码。

答案 2 :(得分:0)

试试这个:

    class System
    {
        public string SystemUser { get; set; }
    }

   var query = dataContext.ExecuteQuery<System>("select SYSTEM_USER AS 'SystemUser'");