C# 如何在Linq查询c中使用子字符串

C# 如何在Linq查询c中使用子字符串,c#,linq,substring,C#,Linq,Substring,我有这个查询,我想检索地址的2个第一个字符。所以我尝试了这个查询: var result = (from c in context.DB_CLIENT join ad in context.DB_ADRESSE on c.CLI_ADR_FACTURATION equals ad.ADR_ID select new { c.CLI_NOM,ad.ADR_ADRESSE3.Substring(0,2)}); 但我有一个错误: Compiler Error

我有这个查询,我想检索地址的2个第一个字符。所以我尝试了这个查询:

    var result = (from c in context.DB_CLIENT
        join ad in context.DB_ADRESSE on c.CLI_ADR_FACTURATION equals ad.ADR_ID
        select new { c.CLI_NOM,ad.ADR_ADRESSE3.Substring(0,2)});
但我有一个错误:

Compiler Error CS0746
Invalid anonymous type member declarator. Anonymous type members must be declared with a member assignment, simple name or member access.

您能帮助我吗?

您必须使用c.ADR\U地址3选择列,并且您正在通过不可用的ad进行选择。如果这是在不同的表中,则需要指定该表名

var result = (from c in context.DB_CLIENT
select new { c.CLI_NOM,c.ADR_ADRESSE3.Substring(0,2)});

如果使用方法而不仅仅是属性,则需要为匿名类型中的属性指定名称

var result = from c in context.DB_CLIENT
             select new { 
                 c.CLI_NOM,  // property name will be used in the anonymous type
                 ADR_ADRESSE3_Prefix = ad.ADR_ADRESSE3.Substring(0,2)
             });
从表达式赋值时,编译器无法推断属性名

:


如果未在匿名类型中指定成员名称,编译器 为匿名类型成员提供与正在创建的属性相同的名称 用于初始化它们。必须为以下属性提供名称: 正在使用表达式初始化

我假设ad是一个局部变量或输入错误,实际上意味着c。

您可以使用let关键字定义短地址,并将其与对象初始值设定项一起使用

 var result = (from c in context.DB_CLIENT
               join ad in context.DB_ADRESSE on c.CLI_ADR_FACTURATION equals ad.ADR_ID
               let address = ad.ADR_ADRESSE3.Substring(0,2)
               select new { CLI_NOM = c.CLI_NOM, Address = address});

如果未在匿名类型中指定成员名称,编译器将为匿名类型成员提供与用于初始化它们的属性相同的名称。必须为正在使用表达式初始化的属性提供名称。你的代码无法编译。