몇 가지 키 크기가 CompiledQuery
를 통해 사전 생성이되지 않고 쿼리를 사용하는 default
,이 미리 컴파일 된 쿼리 중 하나를 선택합니다 .Count
/.Length
에 switch
를 사용 미리 컴파일 된; 스택 오버플로에서 실제 예를 들어 :
static readonly Func<DBContext, int, Post> _get1 =
CompiledQuery.Compile((DBContext db, int id) => db.Posts.SingleOrDefault(p => p.Id == id));
static readonly Func<DBContext, int, int, IEnumerable<Post>> _get2 =
CompiledQuery.Compile((DBContext db, int id0, int id1) => db.Posts.Where(p => p.Id == id0 || p.Id == id1));
static readonly Func<DBContext, int, int, int, IEnumerable<Post>> _get3 =
CompiledQuery.Compile((DBContext db, int id0, int id1, int id2) => db.Posts.Where(p => p.Id == id0 || p.Id == id1 || p.Id == id2));
static readonly Func<DBContext, int, int, int, int, IEnumerable<Post>> _get4 =
CompiledQuery.Compile((DBContext db, int id0, int id1, int id2, int id3) => db.Posts.Where(p => p.Id == id0 || p.Id == id1 || p.Id == id2 || p.Id == id3));
static readonly Func<DBContext, int, int, int, int, int, IEnumerable<Post>> _get5 =
CompiledQuery.Compile((DBContext db, int id0, int id1, int id2, int id3, int id4) => db.Posts.Where(p => p.Id == id0 || p.Id == id1 || p.Id == id2 || p.Id == id3 || p.Id == id4));
static readonly Func<DBContext, int, int, int, int, int, int, IEnumerable<Post>> _get6 =
CompiledQuery.Compile((DBContext db, int id0, int id1, int id2, int id3, int id4, int id5) => db.Posts.Where(p => p.Id == id0 || p.Id == id1 || p.Id == id2 || p.Id == id3 || p.Id == id4 || p.Id == id5));
와
switch (remaining)
{
case 1: results.Add(_get1(Current.DB, ids[offset++])); break;
case 2: results.AddRange(_get2(Current.DB, ids[offset++], ids[offset++])); break;
case 3: results.AddRange(_get3(Current.DB, ids[offset++], ids[offset++], ids[offset++])); break;
case 4: results.AddRange(_get4(Current.DB, ids[offset++], ids[offset++], ids[offset++], ids[offset++])); break;
case 5: results.AddRange(_get5(Current.DB, ids[offset++], ids[offset++], ids[offset++], ids[offset++], ids[offset++])); break;
default: results.AddRange(_get6(Current.DB, ids[offset++], ids[offset++], ids[offset++], ids[offset++], ids[offset++], ids[offset++])); break;
}
(예, 정말)
이렇게하면 읽을 수 있도록 포맷 해주세요. –
오, 저, 그게 아주 읽을 수없는 괴물입니다. 문자열 배열을 어느 비트로 부를 수 있습니까? 왜냐하면'stringArray'는 질의가 아닌 서명에만 나타나기 때문입니다. 그래서 ... 어느 비트가 실패 했나요? "지원하지 않는"것은 무엇입니까? 그것은 런타임에 실패합니까? 그렇다면 정확한 오류 메시지는 무엇입니까? –
예 코드를 제거했지만 런타임에서 오류 –