2011-03-08 2 views
2

데이터베이스 행을 저장할 수 있도록 resultList를 정의하는 방법은 무엇입니까?LINQ 결과를 포함하는 목록 만들기?

List<WhatType?> resultList = new List<WhatType?>(); 

if(someBool){ 
    resultList = db.table.where(a=>a.value>0).ToList(); 
} 
else{ 
    resultList = db.table.where(a=>a.values<=0).ToList(); 
} 
나는 var에 초기 값이 필요하기 때문에 다음 작업을 수행 할 수없는 것

:

var result; 

if(someBool){ 
    result = db.table.where(a=>a.value>0).ToList(); 
} 
else{ 
    result = db.table.where(a=>a.values<=0).ToList(); 
} 

여기 내 범위 문제를 해결하기 위해 더 나은 방법이 있나요를?

감사합니다. 빈 목록

+1

if/else 문 모두 '테이블'은 여전히 ​​동일합니까? 문제가 무엇인지 이해하는 데 많은 혼란이있는 것 같습니다. 명확히하십시오. –

답변

0

설정을 : 당신이 동적 유형을 사용할 수있는 .NET 4.0을 사용

var result = new List<WhatType?>(); 

경우, 그러나 그것은 캐스팅해야합니다 :

var result = new List<dynamic>(); 
result = (List<dynamic>)db.Blogs.Where(b => b.ID == 1); 
+3

을 암시 적으로 입력 된 로컬 변수 – sooprise

+0

에 할당 할 수 없습니다. 두 번째 요점은 어떤 유형으로 설정합니까? 사용할 수있는 제네릭 유형이 있습니까? – sooprise

+0

잘 잡으세요. .NET 4를 사용하고 있습니까? –

0

그럼, ORM 기술을 당신이 사용하고 있습니까? db 오브젝트를 어떻게 구합니까? 수집 된 요소의 유형은 table입니까? 당신은 단순히 모르는 경우, 당신은 조건부 (삼항) 표현으로이 특정 문을 결합 할 수 있습니다

:

var result = someBool 
    ? result = db.table.Where(a=>a.value>0).ToList() 
    : db.table.Where(a=>a.values<=0).ToList(); 

모든 경우에 작동하지 않습니다; 예를 들어 result을 반환하거나 매개 변수로 다른 방법으로 전달해야하는 경우 예상되는 수집 된 유형을 알아야합니다. 그러나이 작은 조각을 사용하면 컴파일러에서 유형을 추론 할 수 있습니다.

편집 : 내가 변수 db과 재산 table이 무엇인지에 대한 정보없이이보다 더 좋은 대답을 줄 수 없습니다. 첫 번째 질문은 객체와 데이터베이스간에 무엇을 사용하고 있습니까? Linq2SQL입니까? 엔티티에 대한 Linq? NHibernate?

Linq 공급자는 항상 네이티브 쿼리 언어 (대개 SQL)로 평가되고 소화 될 식 트리의 기본 인 IQueryable 참조를 제공합니다. 99 %의 경우 IQueryable은 생성되는 개체의 형식에 강력하게 형식화됩니다. 위의 코드를 프로그램에 연결하고 var 키워드 위로 마우스를 가져 가면 추론 된 유형의 이름과 설명이 포함 된 툴팁 풍선이 표시됩니다. 내가 말했듯이, 그럴 가능성이 IQueryable<T> 일 것이며,이 경우 T가 무엇인지에 대한 툴팁에 각주가있을 것입니다.

IQueryable이 일반적이지 않은 경우 수집 된 유형은 단순히 Object입니다. 그러나이 경우 Object에 Value 또는 Values ​​속성이 없기 때문에 Where 메서드가 컴파일되지 않습니다.

+0

이것을 구현할 수는 있지만 상당히 엉망이 될 것입니다. 더 좋은 방법이 있다고 생각하고 싶습니다. Dustin의 제안에 따라 뭔가 단순한 임의의 초기 값이 내 목록에 제공됩니까? – sooprise

+0

나는 똑같은 것으로 생각했지만 OP가 실제로이 목록을 함수의 결과로 반환하기를 더 생각할 수 있기 때문에 망설였습니다. 나는 그것이 진술되지는 않았지만, 앞으로 나아갈 것을 알고 있습니다 : 일반적인 유형에서 파생되는 것 이외에 어떤 생각을 더 검토 할 것입니까? –

0

Linq2SQL에서 결과는 대부분 IQueryable입니다. Where 절 위에 마우스를 올려 놓으면 IntelliSense에 해당 형식이 표시됩니다.

+0

이것은 무엇과 관련이 있습니까? –

+0

유형 *이 * 알려져 있다는 사실과 관련이 있습니다. OP는 단지 그것을 알지 못합니다 ... 알고 있습니다. –

+0

@ Mr. 실망 - OP는 유형을 알고 싶었습니다. 이것은 그것을 찾는 한 방법입니다. –

0

개인적으로, 필자는 반드시 var를 사용하는 것을 좋아하지 않습니다. 따라서이를 다음과 같이 정의하십시오.

List<table> resultList = new List<table>(); 

if(someBool){ 
    resultList = db.table.where(a=>a.value>0).ToList(); 
} 
else{ 
    resultList = db.table.where(a=>a.values<=0).ToList(); 
} 

기타 대답은 유형 정의 방법을 알고 싶어하므로 요점을 놓칩니다. 가장 간단한 용어로 반환 유형이 무엇인지 정의하십시오. Integer 목록을 원하면 유형이 List입니다.이것에 대해주의해야 할 점은 당신이 당신의 테이블 이름으로 테이블을 교체하는 것이, 그래서 고객이라면 당신은 할 것 :

List<customer> result = someBool ? result = db.customer.where(a=>a.value>0).ToList() 
: db.customer.where(a=>a.values<=0).ToList(); 
:

List<customers> resultList = new List<table>(); 

if(someBool){ 
    resultList = db.customers.where(a=>a.value>0).ToList(); 
} 
else{ 
    resultList = db.customers.where(a=>a.values<=0).ToList(); 
} 

는 다음과 같은 당신이 지금 할 수있는 KeithS의 대답 @ 연장하기

는 모두가 만드는 희망 의미 :

+0

필자는 그 점을 놓쳤다 고 생각한다. 액세스되는'table'의 인스턴스는'someBool', AFAIG에 따라 다르다. –

+0

그러면 예제에서 이름이 같은 이유는 무엇입니까? 당신이 옳다면 오해의 소지가 있습니다. –

+0

테이블 자체를 변경하지 않는 where 절의 필터이므로 한 가지 유형 만 있습니다./나는 꽤 명확하다고 생각했습니다. –

0

당신은 당신이 Linq2Sql를 사용하는 것처럼 그것은 보인다 db.table

0

에서 요소의 유형을 사용해야합니다. 이 경우 두 경우 모두 같은 테이블에서 쿼리를 수행하기 때문에 쿼리의 결과 형식을 확실히 알 수 있습니다. 익명 형식이 반환되는 것이 아니므로 ORM은 각 테이블을 해당 클래스에 매핑했습니다.

참고 : 예를 들어 두 가지 경우 모두 동일한 테이블을 쿼리하고 있다고 생각할 수 있습니다. 그게 사실이 아니라면 올바른 것으로 예제를 업데이트해야합니다.

0
resultList = db.table.where(a=>a.value>0 && someBool || a.value<=0 && !someBool).ToList();