데이터베이스 테이블에 대한 텍스트 검색을 구현하려고합니다. 나는 일반적인 저장소를 가지고 있으며 데이터베이스에 꽤 많은 것이 있기 때문에 노출하고자하는 모든 모델에 대해 파생 된 저장소를 만들지는 않으려 고합니다.Entity Framework의 일반 형식에 대한 텍스트 검색
var props = typeof(T).GetProperties()
.Where(p => p.PropertyType == typeof(string));
IEnumerable<T> searched = null;
if (!string.IsNullOrWhiteSpace(searchTerm))
searched = sorted.Where(c => props
.Select(p => (string)p.GetValue(c, null))
.Select(v => v.Contains(searchTerm))
.Contains(true));
나는이 약간의 반사를 통해 얻은 PropertyInfo의 모음 공급하고있어 다음과 같이
그래서 내가 함께 어려움을 겪고있어 코드입니다. 아마도 고성능 아이디어는 아니지만 아직 더 나은 방법을 생각해 보지 못했을 것입니다. 따라서 이들은 문자열의 모든 속성 (테이블의 모든 문자열 검색)이거나 사용자 정의 Searchable 속성이있는 특정 속성을 모델에서 가져올 수 있습니다.
내가 갖는 런타임 예외는 다음과 같습니다
NotSupportedException이 : 유형의 상수 값 'System.Reflection.PropertyInfo'을 만들 수 없습니다. 이 문맥에서는 원시 타입 (' Int32, String, Guid'등) 만 지원됩니다.
나는 리플렉션을 사용하고 있지만 정확히 여기서 예외를 일으키는 원인이 무엇인지 알 수 있습니다. 만약 누군가가 이것을 지적 할 수 있다면 그것은 많이 감사 하겠지만 누군가가 이것을 할 수있는 더 좋은 방법을 제안 할 수 있다면 놀라운 일이 될 것입니다. 미리 감사드립니다!
답장을 보내 주셔서 감사합니다. 당신은 문제에 대해 정확하지만 솔루션은 내가 겪은 것이 아닙니다. where 절의 반영은 데이터베이스의 열을 필터링하기위한 것입니다. 필자가 정말로 필요로하는 것은 이것을 수행하는 리플렉션의 대안입니다. Up은 모두 똑같이 투표했습니다. :) –