들이 Nuget에 System.Linq.Dynamic 라이브러리
을 갈 수있는 방법입니다
[TestMethod]
public void StringyAndDangerous()
{
var fakePersonDbSet = new List<Person> { new Person() { FirstName = "Some", LastName = "Guy" } }.AsQueryable();
var attributes = new string[] { "FirstName", "LastName" };
var selectedFields = String.Join(",", attributes);
var exprssion = string.Format("new ({0})", selectedFields);
var result = fakePersonDbSet.Select(exprssion, attributes).Cast<dynamic>().First();
}
하지만 유형 안전이 느슨하고 컴파일되지 않습니다. ime 점검. '당신은 더 나은 당신이 코드는 경향이 덜 오류가있을 것입니다 필요하지 않은 데이터베이스에서 필드를 당겨과 반사를 사용하여 모두 공격하지만 성능 할게요
[TestMethod]
public void SlowerButSafer()
{
var fakePersonDbSet = new List<Person> { new Person() { FirstName = "Some", LastName = "Guy" } }.AsQueryable();
var attributes = new string[] { "FirstName", "LastName" };
var personPropertylist = CovertToKeyValuePair(fakePersonDbSet.First())
.Where(c=> attributes.Contains(c.Key))
.ToArray();
}
private IEnumerable<KeyValuePair<string, object>> CovertToKeyValuePair<T>(T @object)
{
var result = new List<KeyValuePair<string, object>>();
var properties = typeof (T).GetProperties();
foreach (var property in properties)
{
result.Add(new KeyValuePair<string, object>(property.Name, property.GetValue(@object, null)));
}
return result;
}
다른 접근 방식을 복용 할 수 있으며 당신이 원 존재하지 않는 열을 선택하려고 시도하면 오류가 발생합니다.
죄송합니다. 성취하려는 것을 정말로 이해하지 못합니다. – Pleun
linq 쿼리를 데이터베이스 호출로 변환하는 데 사용하고있는 것은 무엇입니까? Entity Framework 또는 구식 linq-to-sql? – Rhumborl
@ Plleun 나는 그것을 분명히 설명한다고 생각한다. 10 cols를 가진 데이터베이스의 테이블을 상상해 보라. 사용자가 해당 테이블의 모든 행을 인쇄하려고하지만 모든 열을 인쇄하지 않고 그 중 일부를 인쇄하려고합니다. 인쇄하려는 열을 사용자가 선택하도록합니다. 을 선택하는 코드를 작성하는 방법을 모르겠습니다. 사용자가 선택한 확인란 (사용자가 선택한 확인란) – user3915488