c#lambda表达式从vb到c的转换#

c#lambda表达式从vb到c的转换#,c#,linq,C#,Linq,我正在尝试将此vb.net代码转换为c# c#错误: name函数不存在,并且 CT_贴花是一种类型,但其用途类似于变量 有人知道如何正确地转换它吗?如果没有对DBContext的访问,很难给出准确的查询,而忽略了所使用查询的低效性 根据我们所掌握的信息,我希望以下代码非常接近您想要的,或者至少应该让您开始: if (!String.IsNullOrWhiteSpace(txtCompanyName.Text)) { var result

我正在尝试将此vb.net代码转换为c#

c#错误:

name函数不存在,并且 CT_贴花是一种类型,但其用途类似于变量


有人知道如何正确地转换它吗?

如果没有对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());
if(!String.IsNullOrWhiteSpace(txtCompanyName.Text))
{
IEnumerable结果=
其中(d=>string.Equals(d.Tank.Company.CompanyName,txtCompanyName.Text.Trim());

您的问题在于where子句中的关键字函数

您必须这样写。其中(d=>(..)。请参阅“jessehouwing”回复

语法.Where(function(f)…)是C#中lambda表达式的VB.Net等价物。 lambda表达式。其中(d=>(…)表示“d”指向(某个操作或表达式)。
如果有帮助,请告诉我。

始终使用
!String.IsNullOrEmpty(txtCompanyName.Text)
而不是
txtCompanyName.Text.Trim()!=String.Empty
还有
ToList()
是多余的,代码不应该在VB中编译,因为
其中
需要一个谓词,但lambda返回的是一个字符串。@jp2code这些表达式是不等价的;如果txtCompanyName.Text只包含空格字符,它们会给出不同的结果。@phoog yeh,应该是
IsNullOrWhiteSpace
right@Konrad鲁多ph,由于复杂性很难看到,但实际返回的是Contains方法的结果,当然返回bool。
        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()));
        if (!String.IsNullOrWhiteSpace(txtCompanyName.Text))
        {
            IEnumerable<Decal> result = 
                decals.Where(d => string.Equals(d.Tank.Company.CompanyName, txtCompanyName.Text.Trim());