c#lambda表达式从vb转换为c#

时间:2012-02-13 20:12:40

标签: c# linq

我正在尝试将此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是一个类型,但是像变量一样使用。

有人知道如何妥善转换吗?

2 个答案:

答案 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'转到(某个动作或表达式)。 如果这有帮助,请告诉我。