2013-07-04 218 views
3

我还没有发现任何使用LINQ查询多个数据库的好材料。我一直在使用连接字符串来改变数据库和显示用户数据,现在我想实现一个查询所有数据库的查询函数,并返回一个列表,而不是事先选择数据库。LINQ查询多个数据库c#

这就是我到目前为止扔到一起。它从一个数据库返回一个列表,这显然不是我想要的。

public ActionResult getCustomers(string cust) 
    { 
     List<trakman_Entities> teInstances = new List<trakman_Entities>(); 
     IEnumerable<customer> customers = null; 


     for (var i = 1; i < ConfigurationManager.ConnectionStrings.Count; i++) 
     { 

      if (ConfigurationManager.ConnectionStrings[i].ConnectionString.ToLower().Contains("metadata")) 
      { 
       string con = ConfigurationManager.ConnectionStrings[i].ConnectionString; 
       teInstances.Add(new trakman_Entities(con)); 

      } 

     } 

     foreach (trakman_Entities entitiy in teInstances) 
     { 
      customers = entitiy.customers.Where(c => c.code.StartsWith(cust)); 

     } 

     foreach(customer c in customers) 
     { 
      Response.Write(c.code); 
      Response.Write(c.name); 

     } 

     Response.End(); 
     return View(customers); 
    } 

回答

1

的问题是,你把重新分配客户的变量在您的foreach循环:除了

foreach (trakman_Entities entitiy in teInstances) 
    { 
     // overwrites on each iteration! 
     customers = entitiy.customers.Where(c => c.code.StartsWith(cust)); 

    } 

,考虑:

var customers = teInstances.SelectMany(e => e.customers.Where(c => c.code.StartsWith(cust))) 
    .ToList(); 

或者,使用单一的做做这件事LINQ查询:

// start with the list of connection string settings cast to IEnumerable<T> 
var customers = ConfigurationManager.ConnectionStrings.Cast<ConnectionStringSettings>() 
    // filter to the relevant connection strings 
    .Where(s => s.ConnectionString.ToLower().Contains("metadata")) 
    .SelectMany(s => { 
     // for each connection string, select a data context   
     using(var context = new trakman_entities(s.ConnectionString)) { 
      // for each context, select all relevant customers 
      return context.customers.Where(c => c.code.StartsWith(cust)).ToArray(); 
     } // and dispose of the context when we're done with it 
    }) 
    .ToList(); 
+0

我知道l ol,我有点卡住实现一个包含客户列表的列表。 –

+0

@Simon你试过我的建议吗? – ChaseMedallion

+0

@ChaseMedallion better'customers.Add(...)'where'customers' is'List' –