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