저는 Sity에서 여러 조건을 사용하는 방법을 찾으려고했습니다. 현재 Entity Framework를 사용하고 있습니다. 이것이 내가 원하는 것을 성취 할 수있는 유일한 방법이라는 아주 좋은 기회가 있습니다.하지만 누군가가 더 효율적인 방법을 알고 있는지 궁금해했습니다.Sql 다중 조건 메서드
필자는 데이터베이스에서 선택해야하는 다음 행을 찾기 위해 기준을 사용하고 있습니다. 예를 들어 다음 두 가지 조건을 사용할 수 있습니다.
1) Field1 = A;
2) Field2 = B; 순간
0001 - Both Condtions Satisfied,
0004 - Condition 1 Satisfied,
0002 - Condition 2 Satisfied,
0003 - No conditions satisfied
나는 다음과 같은
public TestObj GetNextObj()
{
using (TestDb testDb = new TestDb())
{
TestObj testObj = (from o in testDb.TestTable
where o.Field1 == A && o.Field2 == B
select o).FirstOrDefault();
if (testObj != null)
return testObj;
testObj = (from o in testDb.TestTable
where o.Field1 == A
select o).FirstOrDefault();
if (testObj != null)
return testObj;
testObj = (from o in testDb.TestTable
where o.Field2 == B
select o).FirstOrDefault();
if (testObj != null)
return testObj;
testObj = (from o in testDb.TestTable
select o).FirstOrDefault();
return testObj;
}
}
을하고있는 중이 야 : 나는 다음과 같은 순서로 개별적으로 각 행을 선택해야
| RowId | Field1 | Field2 |
| 0001 | A | B |
| 0002 | B | B |
| 0003 | C | C |
| 0004 | A | C |
: 다음 표에 따라서
이것은 괜찮습니다. 그러나 조건을 테이블에 정의 할 수있게하고 싶습니다. 그는이 과정이 매우 오랜 시간이 걸리기 시작할 조건이 증가합니다.
여기에서 시도하는 다른 방법이 있습니까?
감사합니다.
편집 :::::
이제 다른 테이블 ::
public static SortTest GetRow()
{
using (TestDb testDb = new TestDb())
{
SortParam[] sortParams = (from sp in testDb.SortParams
orderby sp.Priority ascending
select sp).ToArray();
if (sortParams.Length == 0)
{
SortTest sortTest = (from st in testDb.SortTests
orderby st.RowId ascending
select st).FirstOrDefault();
Console.WriteLine("Short route");
return sortTest;
}
Console.WriteLine("Long route");
StringBuilder sqlQueryBuilder = new StringBuilder();
sqlQueryBuilder.Append("SELECT * FROM [Proto].[dbo].[SortTests] ORDER BY \n");
foreach (SortParam sortParam in sortParams)
{
sqlQueryBuilder.Append("CASE WHEN " + sortParam.FieldName + " LIKE '%" + sortParam.FieldValue + "%' THEN 1 ELSE 2 END,\n");
}
sqlQueryBuilder.Append("\nRowId"); //By default use row Id
DbSqlQuery<SortTest> dbSqlQuery = testDb.SortTests.SqlQuery(sqlQueryBuilder.ToString());
return dbSqlQuery.FirstOrDefault();
}
}
내가 SQL을 방지하기 위해 thigns을 변경해야 할 수도 있습니다에 의해 정의 된 순서대로 테이블에서 항목을 선택하려면 다음 코드를 사용하여 주사하지만 지금은 효과가 있습니다.
고맙습니다!
귀하의 제안 괜찮이! 하나는 또한, 'C' – AKDADEVIL
@AKDADEVIL '디코드'같은 것을 사용하거나 값이 단지 'A'보다 더 복잡한 경우 1/2을 반환 기능, 'B'를 작성할 수 디코드 오라클에 고유 - 나는 생각 OP는 다른 질문에 대한 태그를 기반으로 SQLServer를 사용하고있을 수 있습니다. –
아마도 맞을 것입니다. 글쎄, 나는 이미 당신의 대답을 어떤 식 으로든 죄책감을 느끼지 않고있다 upvoted ...;) – AKDADEVIL