C# T_SQL的Linq等价物

C# T_SQL的Linq等价物,c#,linq-to-sql,C#,Linq To Sql,我完全是LINQ-SQL的新手,并试图学习它 这是我尝试过的(仍在工作)…我相信有更好的方法: SELECT Employees.EmployeeId,Employees.FirstName,Employees.LastName FROM Database.dbo.Employees Employees where Employees.FirstName not in (select FirstName from Customers) and LastName not in(sele

我完全是LINQ-SQL的新手,并试图学习它

这是我尝试过的(仍在工作)…我相信有更好的方法:

SELECT Employees.EmployeeId,Employees.FirstName,Employees.LastName
FROM   Database.dbo.Employees Employees
where Employees.FirstName not in
(select FirstName from Customers)    
and LastName not in(select LastName from Customers) and IsEmployeeActive=1

union

select CustomerId,FirstName,LastName from Customers 

如果这是您经常运行的东西,最简单的方法就是将该查询放入视图中。那么视图上的LINQ语法就很容易了

如果你一心想弄清楚LINQ,那么在这里进行计算:

(vb示例)

(c#样本)

这种VB方法将非常接近,但需要一些调试,因为它超出了我的头脑

 var innerQuery = from user in Database.Customers
                         select new
                                    {
                                        Customer.CustomerID,
                                        Customer.FirstName,
                                        Customer.LastName
                                    };

        var userQuery = (from employee in Database.Employees
                         from customer in Database.Customers
                         where
                             employee.FirstName.ToLower().Trim() != customer.FirstName.ToLower().Trim() &&
                             employee.LastName.ToLower().Trim() != customer.LastName.ToLower().Trim()
                         select new
                                    {
                                        employee.EmployeeId,
                                        employee.FirstName,
                                        employee.LastName
                                    });

      var test=  innerQuery.Union(userQuery);

到目前为止,你有没有尝试过任何东西,但没有成功?实际上尝试了很少的事情……我已经更新了查询,以反映在你更新帖子并显示你正在使用c#之前,我在下面给你提供了一个vb版本。我重新标记了你的问题,这样你可能会看得更清楚。懒汉已经回答了。我发现使用测试LINQ查询非常有用。您确定要
UNION
而不是
UNION ALL
?我取消了Distinct(),因为我意识到UNION语句的存在将自动确保只返回不同的值。您的工会将员工与其自身联系在一起。还没有考虑到
名字不在…
IsEmployeeActive
两次查询员工时的良好呼叫,这是打字错误。至于“不在”。。。使用联合会自动忽略任何需要的重复会议。它不需要“不在”条款。事实上不是这样,因为我们正在联合员工ID和客户ID,我投票支持你的一个,因为我们在员工ID上打了个好电话!=我的帖子上有客户ID。
    Dim q = (From e In db.Employees Where e.IsEmployeeActive=1 _
    Select EntityID = e.EmployeeId, e.FirstName, e.LastName).Union(From c In db.Customers _
    Select EntityID = c.CustomerId, c.FirstName, c.LastName)
var q = 
  (from employee in Database.Employees
  where !Database.Customers.Any(c => employee.FirstName == c.FirstName) &&
    employee.IsEmployeeActive
  select new
  {
    employee.EmployeeId,
    employee.FirstName,
    employee.LastName
  }).Union(
  from customer in Database.Customers
  select new
  {
    customer.CustomerID,
    customer.FirstName,
    customer.LastName
  });