根据单独DB中的表筛选Linq返回集



我有两个表。一个在一个数据库中,另一个在单独的数据库中。我需要用第一个选项填充一个下拉列表,由第二个选项过滤。我使用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数据库,如果它们在同一台服务器上并且在单个连接字符串上可用。

有两个选项:

  1. 在第一个数据库中创建一个链接到第二个
  2. 的视图
  3. 创建临时数据上下文,复制DBML详细信息并修改表名

关于如何做到这些的详细信息实际上在我的博客上列出,而不是在这里重复:http://damieng.com/blog/2010/01/11/linq-to-sql-tips-and-tricks-3

最新更新