Linq - конвертировать VB.Net в C # справку по запросу - PullRequest
1 голос
/ 08 января 2010

Мы постепенно преобразовываем некоторый код из VB.Net в C #, поэтому я пытаюсь изучить правильный синтаксис в C #. Может ли кто-нибудь помочь с этим преобразованием? В основном я извлекаю из представления все значения, которые еще не были выбраны (сохранены) в другой таблице, и выполняю поиск по элементам.

Сотрудники a, b, c, d находятся в таблице Employee. Я уже выбрал и сохранил сотрудника a и b. Теперь, когда я перезапущу поиск, он должен исключить сотрудников a и b и искать только c и d, только если критерии поиска выполнены.

Это прекрасно работает в запросе vb.net. Я пытаюсь понять, как перевести.

Спасибо за любую помощь! Я думаю, что это очень простой перевод, у меня просто проблемы с ним.

Dim query = From tmp In context.vw_EmployeeDemographics _
     Where Not (From jitrv In context.JITRuleValidations 
     Join e In context.Employees On jitrv.Employee_RecordID Equals e.RecordID _
     Where jitrv.Parent_RecordID = Parent_RecordID _
  Select e.RecordID).Contains(tmp.Parent_RecordID) And 
  context.fn_ConcatName(tmp.FirstName, tmp.MiddleName,
      tmp.LastName).Contains(_master.pSearchValue1) _
      Order By tmp.LastName.ToUpper(), tmp.FirstName.ToUpper() _
  Select FirstName = tmp.FirstName, MiddleName = tmp.MiddleName, 
  LastName = tmp.LastName, RecordID = tmp.EmployeeID, _
DisplayText = context.fn_ConcatName(tmp.FirstName, tmp.MiddleName, tmp.LastName)

1 Ответ

2 голосов
/ 08 января 2010

Хорошо, как дословное преобразование:

var query = from tmp in context.vw_EmployeeDemographics
            where !(from jitrv in context.JITRuleValidations
                    join e in context.Employees
                    on jitrv.Employee_RecordID equals e.RecordID
                    where jitrv.Parent_RecordID == Parent_RecordID
                    select e.RecordID).Contains(tmp.Parent_RecordID)
                  && context.fn_ConcatName(tmp.FirstName, tmp.MiddleName, tmp.LastName)
                            .Contains(_master.pSearchValue1)
            orderby tmp.LastName.ToUpper(), tmp.FirstName.ToUpper()
            select new { tmp.FirstName, tmp.MiddleName, tmp.LastName,
                         RecordID = tmp.EmployeeID,
                         DisplayText = context.fn_ConcatName(tmp.FirstName, 
                                                     tmp.MiddleName, tmp.LastName) };

Бит, в котором я не уверен, это часть Select в VB - я предполагаю , что она автоматически создает новый анонимный тип (как и запрос C #), но я не уверен.

Я думаю, что это должно быть сделано - но я настоятельно рекомендую вам преобразовать его в нечто более читабельное :) Вот несколько изменений:

var validations = from jitrv in context.JITRuleValidations
                  join e in context.Employees
                  on jitrv.Employee_RecordID equals e.RecordID
                  where jitrv.Parent_RecordID == Parent_RecordID
                  select e.RecordID;

var query = from tmp in context.vw_EmployeeDemographics
            let DisplayText = fn_ConcatName(tmp.FirstName,
                                            tmp.MiddleName, 
                                            tmp.LastName) 
            where !validations.Contains(tmp.Parent_RecordID)
               && DisplayText.Contains(_master.pSearchValue1)
            orderby tmp.LastName.ToUpper(), tmp.FirstName.ToUpper()
            select new { tmp.FirstName, tmp.MiddleName, tmp.LastName,
                         RecordID = tmp.EmployeeID, DisplayText };
...