2013-07-04 4 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 (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

Я знаю, ol, Im немного застрял в реализации списка, содержащего список клиентов. –

+0

@Simon Вы попробовали мое предложение? – ChaseMedallion

+0

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

Смежные вопросы