370 열이 포함 된 내 엔터티에 테이블이 있습니다! 또한 런타임 전에 알 수없는 문자열 배열이 있습니다 (웹 사이트에서 제공).문자열 배열의 열만 표시
예컨대 :
string [] columns = {"column1", "column2", "column3"}
어떻게 내가주는 열이 나에게 결과만을 제공합니다 나의 엔티티에 LINQ를 발사 할 수 있습니까?
몇 시간 동안 수색했지만 지금까지는 제안하지 않습니까?
370 열이 포함 된 내 엔터티에 테이블이 있습니다! 또한 런타임 전에 알 수없는 문자열 배열이 있습니다 (웹 사이트에서 제공).문자열 배열의 열만 표시
예컨대 :
string [] columns = {"column1", "column2", "column3"}
어떻게 내가주는 열이 나에게 결과만을 제공합니다 나의 엔티티에 LINQ를 발사 할 수 있습니까?
몇 시간 동안 수색했지만 지금까지는 제안하지 않습니까?
이것은 Linq-to-Entities로 할 수있는 것이 아닙니다. 코드에서 열을 선언 할 수 있어야합니다.
더 나은 방법은 Sql에서 배열의 열 이름을 사용하여 쿼리를 만들고 Dapper 같은 것을 사용하여 결과를 개체에 매핑하는 것입니다.
Delegate에서 ExpandoObject를 인스턴스화하고 Reflection을 사용하여 들어오는 배열에 지정된 열을 가져올 수 있습니다.
다음 :
if(PI.Name == "Desired column"){ // Or Array index
// Add to Out:
Out.Add(PI.Name, PI.GetValue(Row))
}
:
List<IDictionary<String, Object>> List = Context.Row_Type.Select(delegate(Row_Type Row) {
IDictionary<String, Object> Out = new ExpandoObject() as IDictionary<String, Object>;
PropertyInfo[] PIs = Row.GetType().GetProperties();
foreach(PropertyInfo PI in PIs) {
if(PI.GetIndexParameters().Length == 0) {
Out.Add(PI.Name, PI.GetValue(Row));
}
}
return Out;
}).ToList();
원하는 열을 그냥 PI.Name에 의해 차별을 반환하는 모든 속성 목록 < IDictionary < 문자열, 개체 >> 돌아갑니다 컬럼 이름을 알 수없는 클래스를 반환하고 싶지는 않다고 생각합니다. 열 이름과 값의 사전을 사용할 수 있습니까? 검색어는 여전히 모든 열을 가져와야하지만 관심있는 검색어 만 반환 할 수 있습니다. 당신이 모음이있는 경우
string [] columns = {"column1", "column2", "column3"}
var entity = GetEntity();
var dictionary = columns.ToDictionary(c => c, c => entity.GetType().GetProperty(c).GetValue(entity));
또는은 ...
var entities = GetEntities();
var results = entities
.Select(e => columns.ToDictionary(c => c, c => e.GetType().GetProperty(c).GetValue(e)));
와우 - 정말 멋지다. 내 문제를 해결했다. 내가 필요한 바로 그 것이다. 많이 Thx * thumbsUp * – fahr
이것은 사실이 아니다. 리플렉션 –
을 사용할 수 있으며 리플렉션을 어떻게 사용할 수 있습니까? 예가 있습니까? – fahr
리플렉션과 함께 작동한다고해도 LINQ to Entities에 적합하지 않은 전형적인 사용 사례입니다. 엔티티에 대한 LINQ는 C# 클래스 (엔티티)가 있고 그 엔티티를 기반으로 쿼리를 만들 때 이상적입니다. 여기에서는 오래된 학교의 'DataReader'가 훨씬 더 적합합니다. – LueTm