我有两个表。一个在一个数据库中,另一个在单独的数据库中。我需要用第一个选项填充一个下拉列表,由第二个选项过滤。我使用Linq-to-SQL。下面是我如何拉出"未过滤"列表。
public static DataTable GetSPCCodeList()
{
using (var context = ProviderDataContext.Create())
{
IQueryable<tblProviderAdminSPCCode> tSPCCode = context.GetTable<tblProviderAdminSPCCode>();
return (tSPCCode
.Where(spcCode => spcCode.Inactive == null)
.OrderBy(spcCode => spcCode.SPCCodeID)
.Select(spcCode => new
{ spcCode.SPCCodeID, spcCode.SPCDescription,
spcCode.SPCCategoryID }))
.CopyLinqToDataTable();
}
}
我需要筛选的表只包含SPCCodeID
的一列。我该如何根据它们是否存在于第二个表中来过滤我的List呢?
在另一个数据库上生成并执行LINQ查询,以获取SPCCodeID
的集合到内存变量中,例如
IList<int> spcCodeIDs = /* query goes here */;
然后运行你的查询,但是像这样替换Where子句
.Where(spcCode => spcCode.Inactive == null
&& spcCodeIDs.Contains(spcCode.SPCCodeID))
我会从其他数据库创建这些SPCCodeID值的列表,然后修改您的where子句:
.Where(spcCode => spcCode.Inactive == null && spcCodeList.Contains(spcCode.SPCCodeID))
请记住使用ToList()使scpCodeList成为实际列表,因为我认为如果您使用两个不同的DataContexts进行查询,则会出现问题。
你可以让LINQ to SQL同时选择多个SQL数据库,如果它们在同一台服务器上并且在单个连接字符串上可用。
有两个选项:
- 在第一个数据库中创建一个链接到第二个 的视图
- 创建临时数据上下文,复制DBML详细信息并修改表名
关于如何做到这些的详细信息实际上在我的博客上列出,而不是在这里重复:http://damieng.com/blog/2010/01/11/linq-to-sql-tips-and-tricks-3