2017-12-21 3 views
0

나는 뱅킹 시스템을 개발하려고합니다. 세 개의 테이블 레코드를 단일 테이블에 조인하려고했습니다. 하지만 문제는 내가 컴파일 할 때 나는 다음과 같은 오류가있다.Linq Query returns 익명 유형 오류

오류 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 
      } 
     } 
    } 


This is DBContext class. 

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

답변

1

, 따라서 항상 Concat 요구 같은/일치 유형 T를 실패, 두 익명 형식은 결코 동일하기 때문에 여기의 Concat에 대한 모든 참가자의 출력과 같은 스키마/클래스를 생성하는 코드를 수정하여 아래의 세부 사항을 점검해 :

IEnumerable<T>는 CONCAT 호출에 대해 IEnumerable<T> 필요하므로 확인 T은 익명 형식 가능하지 않은, 일관성을 유지 정의 here, 그와 같은 입력 :

public static IEnumerable<TSource> Concat<TSource>( this IEnumerable<TSource> first, IEnumerable<TSource> second )

class Account 
{ 
    public int? Account_Number {get;set;} 

    public decimal? Deposit {get;set;} 

    public decimal? Withdrawal {get;set;} 

    public decimal? Account_Balance {get;set;} 

    public DateTime? Date {get;set;} 
} 

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.Select(w => new Account 
     { 
      Account_Number = w.Account_Number 
, 
      Deposit = (decimal?)null, 

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

     })); 


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

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

에게 오류를 표시해야합니다 예상 결과 매우 분명하다. Concat 다른 익명 유형을 찾으려고합니다.

var inOut = context.Current_Account_Deposit.Select(w => new 
    { 
     Account_Number = w.Account_Number 
     , 
     Deposit = (decimal?)null, 

     Withdrawal = (decimal?)w.Amount 
     , 
     Date = w.Date 
    }).Concat(context.Current_Account_Withdraw.Select(d => new 
    { 
     Account_Number = d.Account_Number 
     , 
     Deposit = (decimal?)d.Amount 
     , 
     Withdrawal = (decimal?)null 
     , 
     Date = 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, 
     Date = null 
    })); 

또한, 나는 요구 사항 및 세부 사항을 알고하지 않습니다하지만 당신은 Concat 사용에 대한 확신? Concat 대신 join을 만들어야하는 것으로 보입니다. 엔티티에 탐색 속성이 있으면 사용할 것을 강력히 권합니다.

+0

탐색 속성이 있습니까? 그것은 귀하의 요구 사항을 정확하게 만족시킵니다. – lucky

+0

첫째, 쿼리를 만들기 전에 탐색 속성으로 EF 컨텍스트를 꾸며야하며 원하는 데이터를 쉽게 검색 할 수 있습니다. 여기 완벽한 튜토리얼이 있습니다. 확인해 봐. http://www.entityframeworktutorial.net/code-first/configure-one-to-many-relationship-in-code-first.aspx – lucky