이것이 가능한지 확실하지 않거나 내가 찾고있는 것을 정확하게 표현하고 있지만 내 라이브러리에 다음 코드 조각이 반복되어있어 일부 DRY 연습을하고 싶습니다. Google에서 제공하는 간단한 사용자 제공 검색 필드를 기반으로 쿼리하는 SQL Server 테이블 집합이 있습니다. LINQ를 사용하여 검색 문자열에있는 내용을 기반으로 최종 쿼리를 작성합니다. 나는이 밖으로 재사용 가능한 루틴을 만들 제네릭을 사용하는 방법을 찾고 및 람다 함수에 전달 해요 :일반 LINQ 쿼리 조건 자?
private IQueryable<T> getQuery(
T MyTableEntity, string[] arrayOfQueryTerms, Func<T, bool> predicate)
:
string[] arrayOfQueryTerms = getsTheArray();
var somequery = from q in dataContext.MyTable
select q;
if (arrayOfQueryTerms.Length == 1)
{
somequery = somequery.Where<MyTableEntity>(
e => e.FieldName.StartsWith(arrayOfQueryTerms[0]));
}
else
{
foreach(string queryTerm in arrayOfQueryTerms)
{
if (!String.IsNullOrEmpty(queryTerm))
{
somequery = somequery
.Where<MyTableEntity>(
e => e.FieldName.Contains(queryTerm));
}
}
}
내가 뭔가를 보이는 서명 일반적인 방법을 만들기 위해 기대했다
모든 테이블에서 동일한 검색 전략을 사용하고 있으므로 사용법과 실제로 다른 유일한 방법은 MyTable & MyTableEntity를 검색하고 FieldName을 검색하는 것입니다. 이게 말이 돼? where 절에서 쿼리 할 필드의 이름을 동적으로 전달하는 LINQ가있는 방법이 있습니까? 또는 이것을 술어 람다 (lambda)로 전달할 수 있습니까?
e => e.FieldName.Contains(queryTerm)
나는, SQL 아마도 쉽게이 작업을 수행 할 수 있습니다 만 반 방법을 실현,하지만 난이 하나에 대한 LINQ의 가족 모두를 유지하기 위해 싶네요. 또한 제네릭은 이와 같은 문제에 대해 편리해야한다고 생각합니다. 어떤 아이디어?
같은 질문이지만 선택 조항에 대한 : http://stackoverflow.com/questions/10376947/how-can-i-construct-and-save-to-a-db-for-later-use-a-semi- 임의 - 람다 - expre –