Linq - 将VB.Net转换为C#帮助查询

时间:2010-01-08 14:35:50

标签: linq-to-sql vb.net-to-c#

我们正在慢慢地将一些代码从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 个答案:

答案 0 :(得分:2)

好的,作为逐字转换:

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) };

我不确定的是VB中的Select部分 - 我猜测它会自动创建一个新的匿名类型(就像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 };