【问题标题】:asp.net C# :cannot convert from 'string' to '<anonymous type error>'asp.net C#:无法从“字符串”转换为“<匿名类型错误>”
【发布时间】:2016-12-22 14:16:15
【问题描述】:

我正在尝试使用实体框架实现 SQL 查询

select IDVC,CHECKNO,SUBSTRING(ltrim(rtrim(convert(nvarchar,CHECKDATE))),1,4) + '-' + 
                    SUBSTRING(ltrim(rtrim(convert(nvarchar,CHECKDATE))),5,2) + '-' + 
                    SUBSTRING(ltrim(rtrim(convert(nvarchar,CHECKDATE))),7,2) as 
                    CHECKDATE,AMTRMITHC from imdad.dbo.CWHDR  where  IDVC   in 
                    (select IDCUST from  Imdad.dbo.ARCUSO where VALUE like '%10264%'
                    and OPTFIELD='ACCPACCUST')  and transstts='2'
                    Order by CHECKDATE

我要做的是:

var idcust = (from arc in db2.ARCUSOes
              where arc.VALUE.Contains("10264") && arc.OPTFIELD == "ACCPACCUST"
              select new
              {
                  arc.IDCUST

              }).ToList();

这是内部 sql 语句,它将返回如下截图中的项目列表:

然后我尝试实现 in 子句:

   var data = (from ch in db2.CWHDRs
                where
                idcust.Contains(ch.IDVC) && ch.TRANSSTTS = "2"
                select new
                {
                   idvc=ch.idvc

                });

选择其余列,但我因错误而停止:

无法从“字符串”转换为“匿名类型错误”

包含语句中ch.IDVC下的语法错误

任何人都可以找出问题所在吗?

更新代码:

这是阿库索

public partial class ARCUSO
{
    public string IDCUST { get; set; }
    public string OPTFIELD { get; set; }
    public decimal AUDTDATE { get; set; }
    public decimal AUDTTIME { get; set; }
    public string AUDTUSER { get; set; }
    public string AUDTORG { get; set; }
    public string VALUE { get; set; }
    public short TYPE { get; set; }
    public short LENGTH { get; set; }
    public short DECIMALS { get; set; }
    public short ALLOWNULL { get; set; }
    public short VALIDATE { get; set; }
    public short SWSET { get; set; }
}

这个 CWHDR 类

public partial class CWHDR
{
    public string BTCHTYPE { get; set; }
    public decimal CNTBTCH { get; set; }
    public decimal CNTENTR { get; set; }
    public decimal AUDTDATE { get; set; }
    public decimal AUDTTIME { get; set; }
    public string AUDTUSER { get; set; }
    public string AUDTORG { get; set; }
    public string IDBANK { get; set; }
    public string CURNCODE { get; set; }
    public decimal DATERATE { get; set; }
    public string RATETYPE { get; set; }
    public decimal RATEEXCHHC { get; set; }
    public short RATEOP { get; set; }
    public string TRANSNO { get; set; }
    public decimal TRANSDATE { get; set; }
    public short RMITTYPE { get; set; }
    public string FISCYR { get; set; }
    public string FISCPER { get; set; }
    public short ONHOLD { get; set; }
    public short TRANSSTTS { get; set; }
    public string CHECKNO { get; set; }
    public decimal CHECKDATE { get; set; }
    public string IDVC { get; set; }
    public string NAMEVC { get; set; }
    public decimal AMTPR { get; set; }
    public decimal AMTBC { get; set; }
    public decimal AMTVCTC { get; set; }
    public decimal AMTRMITHC { get; set; }
    public decimal CNTAPPLIED { get; set; }
    public decimal AMTDISCTC { get; set; }
    public decimal AMTDISCHC { get; set; }
    public string MANUAL { get; set; }
    public string BANKDRAW { get; set; }
    public string CURNVC { get; set; }
    public string RATETYPETC { get; set; }
    public decimal DATERATETC { get; set; }
    public decimal RATEEXCHTC { get; set; }
    public short RATEOPTC { get; set; }
    public string TEXTNAME { get; set; }
    public string TEXTSTRE1 { get; set; }
    public string TEXTSTRE2 { get; set; }
    public string TEXTSTRE3 { get; set; }
    public string TEXTSTRE4 { get; set; }
    public string NAMECITY { get; set; }
    public string CODESTTE { get; set; }
    public string CODEPSTL { get; set; }
    public string CODECTRY { get; set; }
    public string NAMECTAC { get; set; }
    public string TEXTPHON1 { get; set; }
    public string TEXTPHON2 { get; set; }
    public short DOCTYPE { get; set; }
    public string DOCNBR { get; set; }
    public decimal CNTLSTLINE { get; set; }
    public short SWPRINTED { get; set; }
    public string CHECKLANG { get; set; }
    public short GLPOST { get; set; }
    public string GLACC1 { get; set; }
    public string GLACC2 { get; set; }
    public string NEWBANK { get; set; }
    public short NEWSTAT { get; set; }
    public string CCMCTYPE { get; set; }
    public decimal RLZDATE { get; set; }
    public string COMMENTS { get; set; }
    public decimal EFDATE { get; set; }
    public decimal AMTPPAYTC { get; set; }
    public string ENTRYDESC { get; set; }
    public string CCMCGUID { get; set; }
    public decimal AASCNTBTCH { get; set; }
    public decimal AASCNTENTR { get; set; }
    public short ORIGPDC { get; set; }
    public string CLEARACCT { get; set; }
    public string REFERENCE { get; set; }
    public short RECSTATUS { get; set; }
    public short SWPRNTRMIT { get; set; }
    public decimal REMUNAPL { get; set; }
    public short SWNEEDPR { get; set; }
    public decimal REMUNAPLTC { get; set; }
    public short LANGUAGE { get; set; }
    public decimal DEPSPNUM { get; set; }
    public decimal AMTDISCBC { get; set; }
    public int VALUES { get; set; }
    public short PROCESSCMD { get; set; }
    public string SOURCECODE { get; set; }
    public decimal APPLIEDAMT { get; set; }
    public string CHKFISCYR { get; set; }
    public string CHKFISCPER { get; set; }
    public short SWJOB { get; set; }
    public short APPLYMETH { get; set; }
    public short SWJOBUPGR { get; set; }
    public string PAYMCODE { get; set; }
    public short PAYMTYPE { get; set; }
    public decimal CNTMC { get; set; }
    public decimal AMTMCHC { get; set; }
    public decimal AMTMCBC { get; set; }
    public decimal AMTMCTC { get; set; }
    public string DISTRSET { get; set; }
    public decimal AMTTOTHC { get; set; }
    public decimal AMTTOTBC { get; set; }
    public decimal AMTTOTTC { get; set; }
    public decimal GLMCBATCH { get; set; }
    public decimal GLMCENTRY { get; set; }
    public short SEQNUM { get; set; }
    public string EFYR { get; set; }
    public string EFPER { get; set; }
    public string IDACCTSET { get; set; }
    public decimal DATEACTVPP { get; set; }
    public short SWPRVOUCH { get; set; }
    public decimal DEPDATE { get; set; }
    public string PTNO { get; set; }
}

【问题讨论】:

  • 试试ch.TRANSSTTS == "2" 而不是ch.TRANSSTTS = "2"
  • 在我写 linq 的时候一直发生在我身上。我的脑海里不断尝试着在 linq 中编写 TSql 语法,在 TSql 中编写 linq 语法。尤其是= vs == 和单引号/双引号。

标签: c# asp.net entity-framework


【解决方案1】:

你必须使用:

ch.TRANSSTTS == "2"

改为

 ch.TRANSSTTS = "2"

编辑

idcust 必须是 List&lt;string&gt; 尝试使用此代码它工作

public void Test()
    {
        List<ARCUSO> arcuso = new List<ARCUSO>();
        arcuso.Add(new ARCUSO() {IDCUST = "10264", OPTFIELD = "ACCPACCUST", VALUE = "hj10264"});
        arcuso.Add(new ARCUSO() {IDCUST = "F1.10264", OPTFIELD = "ACCPACCUST", VALUE = "gg10264"});
        arcuso.Add(new ARCUSO() {IDCUST = "F2.10264", OPTFIELD = "ACCPACCUST", VALUE = "gg10264"});
        arcuso.Add(new ARCUSO() {IDCUST = "F4.10264", OPTFIELD = "ACCPACCUST", VALUE = "tt10264"});
        arcuso.Add(new ARCUSO() {IDCUST = "F3.4510264", OPTFIELD = "test", VALUE = "tt10264"});


        List<CWHDR> cwhdrs = new List<CWHDR>();
        cwhdrs.Add(new CWHDR() {TRANSSTTS = 2, IDVC = "10264"});
        cwhdrs.Add(new CWHDR() {TRANSSTTS = 2, IDVC = "F1.10264"});
        cwhdrs.Add(new CWHDR() {TRANSSTTS = 2, IDVC = "F2.10264"});
        cwhdrs.Add(new CWHDR() {TRANSSTTS = 2, IDVC = "F4.10264"});
        cwhdrs.Add(new CWHDR() {TRANSSTTS = 5, IDVC = "F3.4510264"});

        List<string> idcust = (from arc in arcuso
            where arc.VALUE.Contains("10264") && (arc.OPTFIELD == "ACCPACCUST")
            select arc.IDCUST).ToList();

        var data = (from ch in cwhdrs
            where idcust.Contains(ch.IDVC) && (ch.TRANSSTTS == 2)
            select new
            {
                idvc = ch.IDVC
            }).ToList();
    }

【讨论】:

  • 实现 == 运算符时出现另一个错误 '==' 不能应用于 'short' 和 'string' 类型的操作数
  • @faresAyyad 所以使用ch.TRANSSTTS == 2
  • 我这样使用:ch.TRANSSTTS == '2' 一切正常
  • 在 ch.TRANSSTTS == 2 中一切正常,但主题中的错误呢
  • @faresAyyad 确保idcustList&lt;string&gt; 的类型,同时更新问题并添加模型ARCUSOesCWHDRs
【解决方案2】:

让它成为数据库中的数据

  IList<TempClass> table = new List<TempClass>()
                                    {
                                        new TempClass() { IDVC = "1024",TRANSSTTS = "1"},
                                        new TempClass() { IDVC = "F5.1024",TRANSSTTS = "2"},
                                        new TempClass() { IDVC = "F2.1024",TRANSSTTS = "3"},
                                        new TempClass() { IDVC = "F7.1024",TRANSSTTS = "4"},
                                        new TempClass() { IDVC = "F3.1024",TRANSSTTS = "5"}

        };

这是你的身份证

List<string> custIds = new List<string>() { "1024", "F1.1024", "F2.1024", "F3.1024" };

这个 linq 返回“F2.1024

var data = from t in table
               where 
               custIds.Contains(t.IDVC) 
               && t.TRANSSTTS == "3"
               select new
                          {
                              t.IDVC
                          };

【讨论】:

  • 首先感谢您的回答,但我试图将 idcust 的信息作为一个列表获取,当我在调试模式下跟踪它时,它会按照我的预期出现,我的问题是当我实现 IN 子句时ch.IDVC下出现错误
猜你喜欢
  • 2020-08-26
  • 2021-07-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多