2012-02-05 4 views
1

asp.net의 entitydatasource에서 채워지는 gridview가 있습니다. 내 C# 코드 숨김에서 => validDate1 및 < = validDate2가 아닌 모든 데이터를 필터링하는 엔티티 데이터 소스에 WHERE 매개 변수를 추가해야합니다.DateTime WHERE 매개 변수

using (RamRideOpsEntities myEntities = new RamRideOpsEntities()) 
{ 
    var validDates = (from a in myEntities.AdminOptions 
         select new { a.ValidDate1, a.ValidDate2 }).FirstOrDefault(); 

    if (validDates != null) 
    { 
     RidesGridView.Where = " ..... ??? " //TODO 
    } 
} 

편집 : 내가 어디에 있어요 여기

은 아래의 답변을, 좀 더 명확하게 .. = .... 문이 그냥 내가 필요로하는 두 개의 유효한 날짜를 받고있는 validDates 그리드보기에 표시된 데이터가 유효한 날짜 범위 내에 있도록 절을 엔터티 데이터 소스에 추가해야하는 곳이 있습니다.

+1

내가 틀릴 수도 ... –

+1

데이터베이스에서 필터링하는 것이 더하지 않을 것이다, 그러나 그것은이었다 내 엔티티 데이터 소스를 사용할 때 데이터가 실제로 db에서 검색되기 전에 where 절이 적용된다는 사실을 이해하면 실제로 수행하려는 작업입니다. – SHeinema

+0

@SHeinema - 아니요, 우리가 게시 한 코드를 사용해보십시오. 효과가있을 것입니다. –

답변

3

당신은 EntityDataSource를 사용하고 있습니다. 이것은 런타임에 정의 된 문자열을 사용하여 쿼리를 수정할 수있는 매우 복잡한 유형입니다. 더 많은 linq-ish 기법은 문자열이 프로그램 언어의 일부이고 컴파일러가이를 표현식 트리로 바꿀 것입니다 (다른 사람이 게시 한 것처럼). EntityDataSource를 사용하는 한 linq-ish 접근 방식은 작동하지 않습니다.

EntityDataSource.Where을 참조하는 msdn 기사에서 "it"이라는 마법 단어를 사용하여 행을 설명해야합니다. 그런 다음 .WhereParameters 컬렉션에 매개 변수를 제공합니다.

코드 :

using (myEntities = new RamRideOpsEntities()) 
{ 
     var validDates = (from a in myEntities.AdminOptions 
         select new { a.ValidDate1, a.ValidDate2 }).FirstOrDefault(); 

     if (validDates != null) 
     { 
     RidesEDS.Where = @"it.TimeOfCall >= @ValidDate1 AND it.TimeOfCall <= @ValidDate2"; 
     RidesEDS.WhereParameters.Add(@"ValidDate1", DbType.DateTime, validDates.ValidDate1.ToString()); 
     RidesEDS.WhereParameters.Add(@"ValidDate2", DbType.DateTime, validDates.ValidDate2.ToString()); 
     } 
} 
+0

알겠습니다 미스터 데이비드 B, 녹색 체크 표시가 당신에게 가야한다고 말하고 싶습니다. 이것은 내가 얻으려고했던 것입니다 .. 코드에 꽤 좋은 추측도, 나는 일을 끝내고 편집을 추가했습니다. 감사! – SHeinema

0
var validDates = (from a in myEntities.AdminOptions where 
    a.ValidDate1 >= validDate1 && a.ValidDate2 <= validDate2 
    select new { a.ValidDate1, a.ValidDate2 }).FirstOrDefault(); 
+0

내 편집 ^^ – SHeinema

0

당신은의 GridView를 필터링하지 않는 경우, 데이터 소스를 필터링 할 수 있습니다. 대답은 당신이 가진 데이터 소스의 종류에 따라 다르지만을 가정 할 Linq에-호환됩니다

var items = dataSource.Where(
     d => d.Date >= validDates.ValidDate1 && d.Date <= validDates.ValidDate2 
    ); 
RidesGridView.DataSource = items; 
관련 문제