使用Dapper ORM检查记录是否存在

时间:2016-08-17 21:23:12

标签: dapper

使用Dapper ORM检查记录是否存在的最简单方法是什么?

我是否真的需要为查询定义POCO对象,我只想检查记录是否存在?

8 个答案:

答案 0 :(得分:35)

int id = ...
var exists = conn.ExecuteScalar<bool>("select count(1) from Table where Id=@id", new {id});

应该有用......

答案 1 :(得分:4)

我认为由于没有函数调用或数据类型转换,这可能会有更少的开销:

int id = ...
var exists = connection.Query<object>(
    "SELECT 1 WHERE EXISTS (SELECT 1 FROM MyTable WHERE ID = @id)", new { id })
    .Any();

答案 2 :(得分:2)

您可以让您的查询返回bool:

{{1}}

答案 3 :(得分:2)

const string sql = "SELECT CAST(CASE WHEN EXISTS (SELECT 1 FROM MyTable WHERE Id = @Id) THEN 1 ELSE 0 END as BIT)";
bool exists = db.ExecuteScalar<bool>(sql, new { Id = 123 });

答案 4 :(得分:0)

将使用重复记录运行的另一个选项,即不查询表的id

public void RemoveItem(int i) 
{
   // Removes rows with index i 
   myBindingList.RemoveAt(i)
} 

答案 5 :(得分:0)

如果您需要针对非唯一字段执行此类查询,则可以使用HAVING处理大于1的计数。

SELECT 1
FROM Table
WHERE Col=@val
HAVING COUNT(1) > 0

答案 6 :(得分:0)

恕我直言SELECT TOP(1)SELECT COUNT(1)更好

    bool exists = connection.Query<ValueTuple<long>>(
        "SELECT top(1) Id FROM MYTABLE WHERE MYTABLE.Id=@Id",
        new {Id}).Any());

ValueTuple<long>是值类型。 Query<object>映射到引用类型并引起装箱。

答案 7 :(得分:0)

const data = [
  {
    title: 'What is Html',
    content:
      'HTML stands for HyperText Markup Language. HTML is the basic building block of World Wide Web.',
  },
]