Sql多条件方法

本文关键字:方法 条件 Sql | 更新日期: 2023-09-27 18:22:24

我一直在尝试找到一种在Sql中使用多个条件的方法,目前我正在使用实体框架。这很有可能是实现我想要的唯一方法,但我想知道是否有人知道更有效的方法。

本质上,我使用标准来查找数据库中应该选择的下一行。例如,让我们使用以下2个条件:

1) 字段1=A;

2) 字段2=B;

因此,在下表中:

| RowId | Field1 | Field2 |
| 0001  |     A     |  B |
| 0002   | B | B |
| 0003 | C | C |
| 0004 | A | C |

我需要按照以下顺序单独挑选每一行:

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;
    }
}

这还可以,但我希望允许在表中定义条件,我担心当条件数量增加时,这个过程将需要很长时间。

有没有其他方法可以做我在这里尝试的事情??

谢谢。

编辑::::

现在使用以下代码从一个表中按另一个表定义的顺序选择项目::

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注入,但这目前有效。

谢谢!

Sql多条件方法

在SQL中,有一种简单的方法可以在单个查询中完成:

select *
from o
order by case Field1 when 'A' then 1 else 2 end,
         case Field2 when 'B' then 1 else 2 end,
         RowId