2011-03-15 4 views
1

안녕하세요 저는 Silverlight와 C#에 처음으로 실패했으며 데이터를 사용하는 RIA 기술을 사용하는 프로그램을 보유하고 있습니다. 내 데이터 소스에서 단일 열을 선택하는 데 문제가 있습니다. 차트의 단일 시리즈를 채우기 위해 해당 열의 값을 사용하려고합니다.IQueryable Select는 0 개의 레코드를 반환합니다.

내 UI에는 그리드와 막 대형 차트가 있습니다. 나는 사용하여 내 그리드를 채울 수 있어요 : 내 테이블 표에서 모든 (*) 필드 내 데이터 그리드를 채 웁니다

DomainContext ctx = new DomainContext(); 
ListingGrid.ItemsSource = ctx.v_IQ_Flashes; 
ctx.Load(ctx.Get_Table1()); 

가 지금은 하나의 내 차트에 하나의 시리즈를 채우려 그 차트의 열. 다음 코드를 사용하여 반환 값 0 (올바르지 않음)을 지정합니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?

var slot = ctx.v_IQ_Flashes.Where(e => e.Year == t_year).Select(e => e.Win); 
var sum_ret_slot = slot.Sum(); 
decimal sum_slot = sum_ret_slot.Value; 

주 모든 값은 (Slot, sum_ret_slot, sum_slot)는 모든 0 내가이 실제로 호출되고 있는지 확인하기 위해 디버거를 사용하고 그 값이라는 것을 모두가 0

+1

필터 ('Where')를 제거하면 결과가 ...? –

답변

1

그것은 것입니다 그 너 Where 절에서 아무것도 얻지 못했다.

where 절을 제거하면 작동하기 때문에 평가할 수 있으며 모든 레코드와 일치하지 않는 이유를 확인할 수 있습니다.

+0

응답 해 주셔서 감사합니다! 아쉽게도 where 절을 제거하면 동일한 결과 (0)가 반환됩니다. 다음을 포함하여 BusinessApplication.Web.Services; BusinessApplication.Models을 사용하는 ; using System.Linq; – James

+0

@James 그럼 당신은 실제로 아무것도 얻지 못하고 있습니다. hrmm – msarchet

+0

예. 아주 이상합니다. 동일한 정확한 테이블을 사용하여 DataGrid를 채우고 500 개가 넘는 레코드로 채 웁니다. 무엇을해야할지 모르겠습니다. – James

0

msarchet에 동의합니다 - t_year 변수의 값을 확인하십시오 - Where 술어와 실제로 일치하는 행이 있습니까? 당신이 sum_slot지고의 코드를 추가 할

var slot = ctx.v_IQ_Flashes.Where(e => e.Year == 2010).Select(e => e.Win); 
var sum_ret_slot = slot.Sum(); 
decimal sum_slot = sum_ret_slot.Value; 
+0

두 경우 모두 나는 0 개의 결과를 얻습니다. 어쩌면 이것을 잘못 부른 것일까 요? 이 코드는 내 revenue_class.cs 파일 내에 있습니다. main.xaml main.xaml.cs 및 rev.cs 적어도 LINQ를 제대로 수행하고 있다는 좋은 소식이지만 전체 환경에 대한 지식이 부족한 것 같습니다. – James

+0

'ctx.Load (ctx.Get_Table1());'-이 줄은 꽤 중요합니다! – Stuart

0

:

var slot = ctx.v_IQ_Flashes.Select(e => e.Win); 
var sum_ret_slot = slot.Sum(); 
decimal sum_slot = sum_ret_slot.Value; 

아니면 결과를 얻을 할 당신의 코드를 변경하는 경우 :

당신이에 코드를 변경 한 경우에는 결과를 얻을 수 있습니까? 결과적으로로드하는 경우 결과가 0입니다. ctx.Load (ctx.Get_Table1())는 비동기 작업이며 다음 단계가 필터 인 경우 데이터가 아직로드되지 않습니다. 내가 생각

,이 코드를 잘 만드는 첫 번째 방법 - 추가 필터

ctx.Load 콜백() ctx.Get_Table1를 (() => {// sum_slot을받을}, NULL);

번째 방법 - 쿼리 필터를 적용

ctx.Load (. ctx.Get_Table1() (E => e.Year == t_year)) - 콘텍스트 필터링 항목을로드한다.

+0

정말 고마워. 고맙습니다. 나는 합계를 얻으려는 것보다 단지 1 기록만을 가지고있다. 'test'라는 새 테이블을 만들었으므로 레코드가 하나뿐이므로 합계를 버렸습니다. 그러나 두 번째 방법을 시도하면서 변수에 값을 할당하는 방법은 무엇입니까? var test_var = ctx.Load (ctx.GetTest_tblQuery(). 여기서 (e => e.ID> 0) .Select (e => e.test)); 하지만 오류가 발생합니다 : 'int'형식을 암시 적으로 변환 할 수 없습니다. to 'BusinessApplication.Web.test_tbl' – James

+0

이 경우 ctx.Load (ctx.GetTest_tblQuery(). FirstOrDefault (e => e.ID> 0))를 시도하십시오. 도메인 서비스 메서드 GetTest_tbl()은 IQueryable을 반환해야합니다.

관련 문제