У меня есть ситуация, когда мне приходится сопоставлять несколько номеров клиентов из одной системы с одним номером клиента в другой системе.Так, например, все номера клиентов 225, 228 и 223 в системе A будут сопоставлены с номером клиента 110022 в системе B. Достаточно просто, у меня есть для этого настройка матрицы.
Я извлекаю данные матрицы следующим образом:
var dt_th_matrix = (from m in aDb.Matrix_Datatrac_TopHat select m).ToArray();
Таким образом, записи будут выглядеть примерно так:
customerA: 3 CustomerB: 1001
CustomerA: 4 CustomerB: 1001
CustomerA:5 Клиент: 1002
Затем я собираю большие данные и перебираю все элементы.Для каждого из пунктов я выбираю соответствующий номер клиента из матрицы следующим образом:
foreach (var dt_stop in mainPull)
{
int? th_customerId = (from d in dt_th_matrix
where d.datatrac_customer_no == dt_stop.Customer_No.ToString()
select d.tophat_customer_detail_Id).First();
Я бы предпочел просто встроить код, чтобы получить номер клиента из матрицы непосредственно в моей таблице данных.- часть «Запрос идет как-то здесь» будет некоторой разновидностью лямбды, я полагаю.Любая помощь?
Я пробовал что-то вроде этого:
th_customerId = (dt_th_matrix.First().tophat_customer_detail_Id.Equals c.Customer_No)
Но это не так (очевидно)
var mainPull = (from c in cDb.DistributionStopInformations
join rh in cDb.DistributionRouteHeaders on c.Route_Code equals rh.Route_Code
where c.Company_No == 1 &&
(accountNumbers.Contains(c.Customer_No)) &&
(brancheSearchList.Contains(c.Branch_Id) && brancheSearchList.Contains(rh.Branch_Id)) &&
c.Shipment_Type == "D" &&
(c.Datetime_Created > dateToSearch || c.Datetime_Updated > dateToSearch) &&
rh.Company_No == 1 &&
((rh.Route_Date == routeDateToSearch && c.Route_Date == routeDateToSearch) ||
(rh.Route_Date == routeDateToSearch.AddDays(1) && c.Route_Date == routeDateToSearch.AddDays(1)))
orderby c.Unique_Id_No
select new
{
c.Datetime_Updated,
th_customerId = ("Query goes here somehow")
c.Datetime_Created,
c.Unique_Id_No,
c.Original_Unique_Id_No,
c.Unique_Id_Of_New_Stop,
c.Branch_Id,
c.Route_Date,
c.Route_Code,
c.Sequence_Code,
c.Customer_No,
c.Customer_Reference,
c.Shipment_Type,
c.Stop_Name,
c.Stop_Address,
c.Stop_City,
c.Stop_State,
c.Stop_Zip_Postal_Code,
c.Stop_Phone_No,
c.Stop_Arrival_Time,
c.Stop_Departure_Time,
c.Address_Point,
c.Stop_Special_Instruction1,
c.Stop_Special_Instruction2,
c.Stop_Expected_Pieces,
c.Stop_Expected_Weight,
c.Stop_Signature,
c.Actual_Arrival_Time,
c.Actual_Depart_Time,
c.Actual_Service_Date,
c.Stop_Actual_Pieces,
c.Stop_Exception_Code,
c.Created_By,
rh_Route_Date = rh.Route_Date,
routeHeaderRouteCode = rh.Route_Code,
rh.Actual_Driver,
rh.Assigned_Driver,
rh_routeDate = rh.Route_Date
}).ToArray();
Я постараюсь уточнить выше.
Мне нужно, чтобы запрос Linq сказал: для каждой извлекаемой записи я попаду в массив с именем dt_th_matrix, получу запись, соответствующую этой строке, и использую ее.
данные в матрице выглядят в точности так:
Запись 1: datatrac_customer_no: 227, tophat_customer_detail_Id 1
Запись 2: datatrac_customer_no: 228, tophat_customer_detail_Id: 1 * 10rac_D3: 1034 * 10: 910, tophat_customer_detail_Id: 5
Затем для первой записи, извлеченной в mainPull, поле c.customer_no == 228, поэтому мне нужен запрос в операторе select new, чтобы заменить th_customerId на 1 (из записи 2 вМатрица.
Затем, скажем, следующая запись вытащила в mainPull поле c.customer_no = 910 th_customerId будет 5.
Это то, что первая строка mу foreach заявление в настоящее время делает.Я хочу переместить эту логику внутрь моего запроса LINQ.