2017-12-21 1 views
2

나는 뱅킹 시스템을 개발하려고합니다. 세 개의 테이블 레코드를 단일 테이블에 조인하려고했습니다. 하지만 문제는 내가 컴파일 할 때 나는 다음과 같은 오류가있다.Linq 쿼리 단일 레코드를 표시하는 대신 레코드 목록을 반환

오류 CS1929 'IOrderedQueryable <>' 'ParallelEnumerable.Concat <이> (ParallelQuery <>는 IEnumerable이 <>)'는 수신기가 필요 'CONCAT'에 대한 정의 및 최고의 확장 메서드 오버로드를 포함하지 않는 유형 'ParallelQuery <>

여기 내 Linq 쿼리입니다.

public string TranscationDetails(string Account_Number) 
      { 

       var accountNumber = int.Parse(Account_Number);//It could be better to use TryParse 
       using (HalifaxDatabaseEntities context = new HalifaxDatabaseEntities()) 
       { 

     var inOut = context.Current_Account_Deposit.Where(x => x.Account_Number == accountNumber).Select(w => new 
       { 
        w.Account_Number, 
        Deposit = (decimal?)null, 
        Withdrawal = (decimal?)w.Amount, 
        w.Date 
       }).Concat(context.Current_Account_Withdraw.Select(d => new 
       { 
        d.Account_Number, 
        Deposit = (decimal?)d.Amount, 
        Withdrawal = (decimal?)null, 
        d.Date 
       })).OrderBy(r => r.Date) 
      .Concat(context.Current_Account_Details.Select(e => new 
      { 
       //You should perform same anonymous type which you want to concat 
       Account_Number = e.Account_Number, 
       Deposit = (decimal?)e.Account_Balance, 
       Withdrawal = (decimal?)null, 
       e.Account_Fees 
      })); 


        var js = new System.Web.Script.Serialization.JavaScriptSerializer(); 

        return js.Serialize(inOut); // return JSON string 
       } 
      } 
     } 

이것은 DBContext 클래스입니다. 여기

public partial class HalifaxDatabaseEntities : DbContext 
     { 
      public HalifaxDatabaseEntities() 
       : base("name=HalifaxDatabaseEntities") 
      { 
      } 

      protected override void OnModelCreating(DbModelBuilder modelBuilder) 
      { 
       throw new UnintentionalCodeFirstException(); 
      } 

      public virtual DbSet<Web_User_login> Web_User_login { get; set; } 
      public virtual DbSet<USER> USERS { get; set; } 
      public virtual DbSet<tblUser> tblUsers { get; set; } 
      public virtual DbSet<Current_Account_Holder_Details> Current_Account_Holder_Details { get; set; } 
      public virtual DbSet<Current_Account_Details> Current_Account_Details { get; set; } 
      public virtual DbSet<Current_Account_Deposit> Current_Account_Deposit { get; set; } 
      public virtual DbSet<Current_Account_Withdraw> Current_Account_Withdraw { get; set; } 
     } 

모델 클래스입니다

.. 여기 enter image description here 내가 계좌 번호를 클릭하면 자신이 특정 레코드를 표시해야합니다 예상 결과 데이터베이스 기록 여기 enter image description here

입니다 enter image description here

+0

linq에'string Account_Number' 인 –

+0

이라는 매개 변수를 사용하지 않는 것처럼 보입니다. 위의 오류가 나타나면이 출력이 아래에 없어야합니다. –

+0

.Concat (context.Current_Account_Details.Select (E => 새로운 { e.Account_Number, Account_Balance = (10 진수) e.Account_Balance ?})); – Mohammad

답변

1
을 수행하기 전에 특정 accountnumber 정보를 얻을 필요로

오직 연결 만 가능합니다. 캘리. 연결하기 전에 레코드를 로컬로 구체화 할 수 있도록 각 Concat 앞에 .ToList()를 추가하십시오.

참고 : Where 절은 Current_Account_Deposit에만 적용됩니다. 철회 및 세부 정보는 모든 기록을 반환합니다.

3 가지 기본 컨텍스트 쿼리를 생성하십시오. 각 테이블에 하나씩 ToList()를 사용하여 각 테이블을 완성하십시오. 나중에 Concat를 사용하여 3 개의 모든 목록을 하나의 목록으로 연결하십시오.

이렇게하면 개념을 이해하게되며 여기에서 앞으로 나아갈 수 있습니다.

var q1 = context.Current_Account_Deposit.Where(x => x.Account_Number == accountNumber).Select(w => new 
    { 
     w.Account_Number, 
     Deposit = (decimal?)null, 
     Withdrawal = (decimal?)w.Amount, 
     w.Date 
    }).ToList(); 

    var q2 = context.Current_Account_Withdraw.Select(d => new 
    { 
     d.Account_Number, 
     Deposit = (decimal?)d.Amount, 
     Withdrawal = (decimal?)null, 
     d.Date 
    }).OrderBy(r => r.Date).ToList(); 

    var q3 = context.Current_Account_Details.Select(e => new 
     { 
      //You should perform same anonymous type which you want to concat 
      Account_Number = e.Account_Number, 
      Deposit = (decimal?)e.Account_Balance, 
      Withdrawal = (decimal?)null, 
      e.Account_Fees 
     }).ToList(); 

    var inOut = q1.Concat(q2).Concat(q3).ToList(); 

q2와 q3에 동일한 Where 절을 추가해야 할 수 있습니다. 네가 원한다면 나는 확실하지 않았다.

+0

내 코드를 편집하면 나에게 쉽지가 ?? – Mohammad

+0

@ 모함마드 : 편집 된 게시물보기 희망이 도움이됩니다. – Edu001

+0

동일한 형식의 목록 만 연결할 수 있습니다. q1 및 q2는 q3과 다른 형식을 갖는 객체 목록을 반환합니다. q3을 Date 대신 Account_Fees 필드로 사용하십시오. 그들 모두를 평등하게 만드십시오. – Edu001

1

이미 레코드 목록을 가지고 있다고 가정합니다.

다음과 같이 표시됩니다.

var getList = inOut.Where(x=>x.Account_Number == 
Account_Number).FirstOrDefault(); 

귀하의 inOut이 진정한 결과 일 경우

+0

잘 대답이지만, 요점은 처음에 where 절을 넣을 때 불필요하게 다른 concat을 수행하는 이유입니다. –

+0

이것은 3 개의 테이블 레코드와 하나의 레코드로 결합하여 각도 js 응용 프로그램에 표시합니다. – Mohammad

1

내가 절은 이전 .Where(x=> x.Account_Number == accountNumber)

변경을 선택 위치를 추가 한이 :

var inOut = context.Current_Account_Deposit.Select(w => new 
      { 
       w.Account_Number, 
       Deposit = (decimal?)null, 
       Withdrawal = (decimal?)w.Amount, 
       w.Date 
      }).Concat(context.Current_Account_Withdraw.Select(d => new 
      { 
       d.Account_Number, 
       Deposit = (decimal?)d.Amount, 
       Withdrawal = (decimal?)null, 
       d.Date 
      })).OrderBy(r => r.Date) 
      .Concat(context.Current_Account_Details.Select(e => new 
      { 
       e.Account_Number, 
       Account_Balance=(decimal?)e.Account_Balance 
      })); 

사람 :

var inOut = context.Current_Account_Deposit.Where(x=> x.Account_Number == accountNumber).Select(w => new 
      { 
       w.Account_Number, 
       Deposit = (decimal?)null, 
       Withdrawal = (decimal?)w.Amount, 
       w.Date 
      }).Concat(context.Current_Account_Withdraw.Select(d => new 
      { 
       d.Account_Number, 
       Deposit = (decimal?)d.Amount, 
       Withdrawal = (decimal?)null, 
       d.Date 
      })).OrderBy(r => r.Date) 
      .Concat(context.Current_Account_Details.Select(e => new 
      { 
       e.Account_Number, 
       Account_Balance=(decimal?)e.Account_Balance 
      })); 

당신은 CONCAT에게

+0

정말 고마워요. – Mohammad

+0

예상대로 작동하고 있습니까? –

+0

괜찮습니까? 걱정하지 않으셔도됩니다. 해결되지 않으면 알려주세요. –

관련 문제