Linq to Sql:仅选择DB2-table2上不存在的DB1-table1中的项目

时间:2013-01-04 14:32:21

标签: c# linq-to-sql multi-database

我一直在研究如何在c#项目中正确实现波纹管任务。

它被预先考虑......

获取特定数据库表(db1)中存在但在其他特定数据库表(db2)上不存在的所有数据

两个表都有共同的ID

我已经面临很多关于此的帖子,但似乎没有解决我的问题。 有什么帮助吗?

编辑:

Select all data 
on table_x from database_x 
Where item_id from table_x are not found inside table_y from database_y

=>以列表格式返回数据

2 个答案:

答案 0 :(得分:5)

这是我正在寻找的解决方案。基于@ user1949706的回答,我选择了两个表中的所有数据和LINQ(也来自不同的数据库),我将它放在内存中。

要完全回答我关于如何使用LINQ执行此操作的问题,请执行以下操作:

//DB1
db1DataContext db1 = new db1DataContext();
//DB2
db2DataContext db2 = new db2DataContext();


//SELECT ALL DATA FROM DB1
var result1 = (from e in db1.Items
               select e
              ).ToList();

//SELECT ALL DATA FROM DB2
var result2 = (from e in db2.Item2s
               select e
              ).ToList();

//SELECT ALL ELEMENTS FROM DB2.TABLE THAT DO NOT EXISTS ON DB1.TABLE BASED ON EXISTING ID's            
var resultFinal = ( from e in result1
                    where !(from m in result2
                            select m.Id).Contains(e.Id)
                    select e
                  ).ToList();

我还要感谢罗伯特·罗斯(Robert Rouse)向this question和其他所有试图提供帮助的人致敬。

希望它可以帮助别人!

答案 1 :(得分:2)

根据this回答,您可以使用LINQ将表连接到不同的数据库。甚至加入服务器。

另一个选择是读取内存中所需的所有数据并将两个表连接到内存中(您仍然可以使用LINQ)。