Я надеялся, что смогу получить некоторую помощь в оптимизации следующего поиска данных. Вот пример использования. Я хочу отобразить список переводчиков (поставщиков) в сетке Telerik ASP.NET MVC. Эти переводчики имеют тарифы (или схемы ценообразования) по языковым парам. В этой базе данных менее 400 переводчиков. Сначала я хочу отобразить их все, но пусть пользователи фильтруют по языкам, которые они переводят. Существует таблица поставщика (переводчика), таблица языковых пар (с FK для исходного и целевого языка) и таблица языков.
Вот что у меня есть, но медленно. Основная причина заключается в том, что для каждого поставщика мне нужно получить каждый уникальный язык, который они переводят (исходный и целевой языки). Я не знаю, как это сделать без ForEach. Я даже не уверен, как я мог бы сделать это в SQL без времени, временной таблицы или курсора.
public List<tblSupplier> GetApprovedSuppliers()
{
var query = from s in db.tblSuppliers
join c in db.tblCountryLists on s.SupplierCountry equals c.CountryID into g1
from c in g1.DefaultIfEmpty()
select new
{
SupplierID = s.SupplierID,
SupplierName = s.CompanyName == null ? s.SupplierFirstName + " " + s.SupplierLastName : s.CompanyName,
SupplierEmails = s.SupplierEmails,
SupplierType = s.SupplierType,
Country = c.Countryname
};
List<tblSupplier> list = query.ToList().ConvertAll(s => new tblSupplier
{
SupplierID = s.SupplierID,
SupplierName = s.SupplierName,
SupplierEmails = s.SupplierEmails,
SupplierType = s.SupplierType,
Country = s.Country
}).OrderBy(s => s.SupplierName).ToList();
list.ForEach(s => s.Languages = this.GetLanguages(s.SupplierID));
return list;
}
public string GetLanguages(int supplierID)
{
var query = (from ps in db.tblSupplierPricingSchemes
join lp in db.tblLangPairs on ps.PSLangPairID equals lp.ProductID
join sl in db.tblLanguages on lp.SourceLanguageID equals sl.LanguageID
where ps.SupplierID == supplierID
select sl.LanguageDesc)
.Union
(from ps in db.tblSupplierPricingSchemes
join lp in db.tblLangPairs on ps.PSLangPairID equals lp.ProductID
join tl in db.tblLanguages on lp.TargetLanguageID equals tl.LanguageID
where ps.SupplierID == supplierID
select tl.LanguageDesc);
return string.Join(", ", query);
}
Любая помощь приветствуется.
Спасибо,
Стив