2014-09-13 4 views
0

MySQL 용 ADO.NET Entity Framework를 사용하는 C#에서 메서드를 작성했습니다. 나는 종류의이 같은 함수가 호출 될 때, 내가 선택하고있어 열을 지정하는 함수를 만들고 있었다 :C# Entity Framework - paremeter로 지정된 열을 어떻게 얻을 수 있습니까?

public string GetColumn(string whereValue, string column) 
{ 
    xxxEntities data = new xxxEntities(); 
    lock (lockObject) 
    { 
    var result = data.employees.SqlQuery("SELECT `" + column + "` FROM `employees` WHERE `Code` = '" + code + "'"); 
    return result.ToListAsync().Result[0].????; // I want to get the column in the parameters 
    } 
} 

덕분에 어떤 도움을 주시면 감사하겠습니다.

+0

그래서 :

이렇게하려면 사용자 정의 SQL 구축을 포함하지 않는 방법으로하는 또 다른 방법은, 원하는 속성에 액세스 쿼리의 employee 객체를 사용하지만, 반사를 사용하는 것 'employee' 객체의 목록이 아닌 단일 열을 반환하겠습니까? –

+0

네, 기본적으로. – iMix

답변

0

대상 열이 잠시 동안 문자열이라고 가정 해 봅시다. 대상 열이 정수했다

// I've parameterized the parameterizable part of your query 
var result = data 
    .employees 
    .SqlQuery<string>("SELECT `" + column + "` FROM `employees` WHERE `Code` = @p0", code); 
return result.ToListAsync().Result[0]; // Result[0] is a string 

경우, 그 첫 번째 줄은 다음과 같습니다 :

var result = data 
    .employees 
    .SqlQuery<int>("SELECT `" + column + "` FROM `employees` WHERE `Code` = @p0", code); 

이 프로그램은 result 요구 될 어떤 종류의 아무 생각이 없습니다, 당신은 그래서 그런 다음 구문이 될 것이다 SqlQuery 메서드에 형식 매개 변수를 제공하여이를 알릴 필요가 있습니다.

column이 다양한 유형을 가질 수있는 경우에는 C#이 속성 유형을 이해할 방법이 없으므로 약간의 문제가 있습니다. 특별한 논리를 사용해야 할 수도 있습니다. 당신을

// Warning: this is being done from memory. 
var result = data.employees 
    .Where(e => Code == code); 
// Assuming the property is a string: 
return result 
    .Select(e => (string) typeof(employee).GetProperty(column).GetValue(e)) 
    .ToListAsync(); 
+0

이 글을 쓰고 나자 다른 방법을 생각해 보았습니다. LINQ에게 원하는 'employee'의 속성을 알려주는 속성 식을 메서드에 전달하는 방법을 생각했습니다. 리플렉션보다 빠릅니다. 더 많은 정보를 원하시면 알려주십시오. –

관련 문제