根据上面的评论,这是一个即时示例:
var builder = new StringBuilder();
builder.AppendLine("SELECT Foo FROM Bar");
if (fisrtName != null || lastName != null)
builder.AppendLine("WHERE");
if (firstName != null)
builder.AppendLine(" Bar.FirstName = @Firstname");
if (firstName != null && lastName != null)
builder.Append(" AND");
if (lastName != null)
builder.AppendLine(" Bar.LastName = @LastName");
var sql = builder.ToString();
如您所见,dapper 现在将运行的实际 SQL 将根据firstName
和/或lastName
是否为空而有所不同。如果两者都为空,您将获得一个 SQL 字符串。如果 onlyfirstName
不为空,你会得到另一个。如果 onlylastName
不为空,你会得到另一个。最后,如果两者都不为空,您将得到第四个排列。
这就是“on-the-fly”的含义——dapper 将基于这些独特的排列进行缓存,并且在更复杂的场景中,很容易看出你将如何最终得到许多不同的排列,所有其中需要独立缓存。