2011-06-07 89 views
2
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-SQL的总新手,并试图学习它。Linq等效的T_SQL

这是我曾尝试(仍在工作)。我相信有一个更好的方法:

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); 
+0

你尝试过什么到目前为止,把它不行? – 2011-06-07 18:46:50

+0

实际上尝试了几件事情....我已更新查询以反映它 – Talk2me 2011-06-07 19:00:35

+0

在更新您的帖子并显示您正在使用c#之前,我给了您一个vb版本。我已经重申了您的问题,以便您可以获得更多的外观。 – RThomas 2011-06-07 19:10:27

回答

2

如果这是你会定期运行的最简单的方法是把那个查询到视图。然后视图上的LINQ语法很简单。

如果你有你的心脏上搞清楚设置的LINQ工作,然后就出在这里:

http://msdn.microsoft.com/en-us/vbasic/bb688085(VB样本)

http://msdn.microsoft.com/en-us/vcsharp/aa336746.aspx(C#示例)

这VB的做法将非常接近但是由于它在我的头顶,所以需要进行一些调试。

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) 
+0

我把Distinct()关掉了,因为我意识到Union语句会自动确保只返回不同的值。 – RThomas 2011-06-07 22:56:40

+0

你的工会与自己的员工。也没有考虑到'姓氏不在......'和'IsEmployeeActive' – Magnus 2011-06-08 07:49:46

+0

打电话询问员工两次,这是错字。至于“不在”......使用联合会自动忽略任何需要复制的会议。它不需要“NOT IN”子句。 – RThomas 2011-06-08 08:08:35

2
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 
    }); 
+0

我在你的投票中对employeeid!= customerid上的好电话投了一票。 – RThomas 2011-06-08 16:36:52