2009-06-17 3 views
2

내가 열거 값을 저장하는 데 사용할 내 데이터베이스 테이블의 필드, 예를 들어,이 : 지금은 LINQ 쿼리를 작성하려는 LinqToSQL 쿼리에서 열거 형을 어떻게 사용합니까?

create table MyTable (
    ... 
    Status tinyint not null, 
    ... 
) 

내 C# 클래스에서

내가

public enum TStatus : byte { 
    Pending = 1  
    Active = 2, 
    Inactive = 3, 
} 

public TStatus MyStatus { 
    get { return (TStatus)Status; } 
    set { Status = (byte)value; } 
} 

이를 그 MyStatus 속성을 MyTable으로 사용합니다.

var q = MyDataContext.GetTable<MyTable>().Where(t => t.MyStatus == TStatus.Active); 

하지만 물론

, Linq는이 SQL로 MyStatus를 해석하는 방법을 알고하지 않습니다. LinqToSQL에서 작동하려면 MyStatus으로 무엇을해야합니까? 이 링크

답변

7

체크 아웃 : - - 적어도 나에게이 사람이 죽을 않았다 링크로

http://dotnet.org.za/hiltong/archive/2008/08/06/using-enums-with-linq-to-sql.aspx

죽을 이곳은 중요한 부분입니다 :

[칼럼에 추가 엔티티]가 기본적으로 Type은 "int (System.Int32)"로 표시되지만 열거 형의 정규화 된 유형 (내 경우 ConsoleApplication1.CustomerType)으로 변경할 수 있습니다. 하지만, 완전히을 찾기 위해, 당신은 다음과 같이 글로벌 식별자를 추가해야합니다 : 글로벌 :: ConsoleApplication1.CustomerType을, 그래서 같이 그 입력 텍스트 상자에 (하지만 네임 스페이스에 해당)

+1

+1 - 내 생각보다 두 번째 –

+0

같은 게시물 나는 여러 번 (내가 이것을 어떻게하는지 잊을 때마다) 간 적이있다. 또한 처음으로 실제로 전역 한정자를 보게되었습니다. – Will

+0

완벽한 답변 - 감사합니다! 더 나은 것은 남아프리카 블로그에서 온 것입니다! Voerspoed! –

0

돈 컴파일러를 편리하게 사용할 수는 있지만, 열거 형을 int로 변환하면 작동 할 것입니다. 그럼 시도해보십시오 :

var q = MyDataContext.GetTable(). (t => t.MyStatus == (int) TStatus.Active);

관련 문제