我正在尝试将此vb.net代码转换为c#。
If (txtCompanyName.Text.Trim() <> String.Empty) Then
decals = decals.Where(Function(d As CT_Decal) (From c In db.CT_Companies Where c.CompanyName.Contains(txtCompanyName.Text.Trim()) Select c.CompanyID).ToList.Contains((From t In db.CT_Tanks Where t.CargoTankID = d.TankID Select t.CompanyID).Single.ToString()))
End If
在c#中我尝试输入代码:
if (txtCompanyName.Text.Trim() != string.Empty)
{
decals = decals.Where(Function(CT_Decal d)(from c in db.CT_Companies
where c.CompanyName.Contains(txtCompanyName.Text.Trim())
select c.CompanyID).ToList().Contains((from t in db.CT_Tanks where t.CargoTankID == d.TankID
select t.CompanyID).Single.ToString()));
}//end if
c#个错误:
名称功能不存在 CT_Decal是一个类型,但是像变量一样使用。
有人知道如何妥善转换吗?
答案 0 :(得分:2)
如果不访问您的DBContext,很难给出一个确切的查询,忽略您正在使用的查询的低效率。
从我们所拥有的,我希望以下代码非常接近你想要的,或者至少应该让你开始:
if (!String.IsNullOrWhiteSpace(txtCompanyName.Text))
{
var result =
decals.Where(
d => (
from c in db.CT_Companies
where c.CompanyName.Contains(txtCompanyName.Text.Trim())
select c.CompanyID
).Contains(
(from t in db.CT_Tanks where t.CargoTankID == d.TankID select t.CompanyID).Single()));
如果您正确设置了DBContext,我希望它的功能完全相同:
if (!String.IsNullOrWhiteSpace(txtCompanyName.Text))
{
IEnumerable<Decal> result =
decals.Where(d => string.Equals(d.Tank.Company.CompanyName, txtCompanyName.Text.Trim());
答案 1 :(得分:0)
您的问题出在where子句中的关键字函数中。
你必须写下这样的东西。其中(d =&gt;(....))。请参阅'jessehouwing'回复。
语法.Where(function(f)....)是C#中lambda表达式的VB.Net等价物。 lambda表达式.Where(d =&gt;(...))表示'd'转到(某个动作或表达式)。 如果这有帮助,请告诉我。