如何在Linq查询中使用Substring c#

时间:2015-07-09 08:01:22

标签: c# linq substring

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

    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.

你能帮助我吗?

3 个答案:

答案 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)
             });

当您从表达式

中分配值时,编译器无法推断属性名称

MSDN

  

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

进行初始化

我认为ad是局部变量或拼写错误,实际上意味着c

答案 1 :(得分:0)

您必须使用c.ADR_Address3选择列,并选择不可用的ad。如果这个在不同的表中,则需要指定该表名

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

答案 2 :(得分:0)

您可以使用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});