version
LambidcSql:0.69.0
LambdicSql.SqlServer:0.29.0
.NET Framework、.NET Core でも同様。
再現コード
using LambdicSql;
using System;
using System.Data.SqlClient;
using System.Diagnostics;
using static LambdicSql.SqlServer.Symbol;
namespace LambdicSqlTest
{
public interface ICond
{
long Id { get; }
}
public interface ICondWithPaging : ICond
{
int PageSize { get; }
}
public class CondWithPaging : ICondWithPaging
{
public long Id { get; set; }
public int PageSize { get; set; }
}
class Program
{
static void Main(string[] args)
{
Test1(new CondWithPaging { Id = 100, PageSize = 100 });
Test2(new CondWithPaging { Id = 100, PageSize = 100 });
Console.ReadKey();
}
static void Test1(ICond cond)
{
var where = Db<DB>.Sql(_ =>
((bool)("Status = 1").ToSqlObject()) &&
new Condition(true, @"Table1.Id = {0}".ToSqlObject(cond.Id)));
var sql = Db<DB>.Sql(_ => @"select * from Table1
/*0*/where Id = -1/**/
order by Id".TwoWaySql(Where(where)));
var buildedSql = sql.Build(typeof(SqlConnection));
var text = buildedSql.Text;
var ps = buildedSql.GetParams();
Debug.WriteLine(text);
foreach (var p in ps)
{
Debug.WriteLine($"name:{p.Key} values:{p.Value.Value}");
}
}
static void Test2(ICondWithPaging cond /*CondWithPaging だと例外でない*/)
{
// throw exception
// {"Id' は型 'LambdicSqlTest.ICondWithPaging' のメンバーではありません"} System.ArgumentException
var where = Db<DB>.Sql(_ =>
((bool)("Status = 1").ToSqlObject()) &&
new Condition(true, @"Table1.Id = {0}".ToSqlObject(cond.Id)));
var sql = Db<DB>.Sql(_ => @"select * from Table1
/*0*/where Id = -1/**/
order by Id".TwoWaySql(Where(where)));
var buildedSql = sql.Build(typeof(SqlConnection));
var text = buildedSql.Text;
var ps = buildedSql.GetParams();
Debug.WriteLine(text);
foreach (var p in ps)
{
Debug.WriteLine($"name:{p.Key} values:{p.Value.Value}");
}
}
}
}
Stacktrace
場所 System.Linq.Expressions.Expression.PropertyOrField(Expression expression, String propertyOrFieldName)
場所 LambdicSql.ConverterServices.Inside.ExpressionToObject.GetMemberObject(MemberExpression exp)
場所 LambdicSql.ConverterServices.Inside.ExpressionToObject.GetExpressionObjectCore(Expression exp, Object& obj)
場所 LambdicSql.ConverterServices.Inside.ExpressionToObject.GetExpressionObject(Expression exp, Object& obj)
場所 LambdicSql.ConverterServices.ExpressionConverter.ResolveExpressionObject(Expression exp)
場所 LambdicSql.ConverterServices.ExpressionConverter.Convert(MemberExpression member)
場所 LambdicSql.ConverterServices.ExpressionConverter.Convert(Expression exp)
場所 LambdicSql.ConverterServices.ExpressionConverter.Convert(UnaryExpression unary)
場所 LambdicSql.ConverterServices.ExpressionConverter.Convert(Expression exp)
場所 LambdicSql.ConverterServices.ExpressionConverter.ConvertToCode(Object obj)
場所 LambdicSql.Specialized.SymbolConverters.ToSqlConverterAttribute.<>c__DisplayClass0_0.<Convert>b__0(Expression e)
場所 System.Linq.Enumerable.WhereSelectEnumerableIterator`2.MoveNext()
場所 System.Linq.Buffer`1..ctor(IEnumerable`1 source)
場所 System.Linq.Enumerable.ToArray[TSource](IEnumerable`1 source)
場所 LambdicSql.Specialized.SymbolConverters.ToSqlConverterAttribute.Convert(MethodCallExpression expression, ExpressionConverter converter)
場所 LambdicSql.ConverterServices.ExpressionConverter.Convert(MethodCallExpression method)
場所 LambdicSql.ConverterServices.ExpressionConverter.Convert(Expression exp)
場所 LambdicSql.ConverterServices.ExpressionConverter.ConvertToCode(Object obj)
場所 LambdicSql.Specialized.SymbolConverters.ConditionConverterAttribute.Convert(NewExpression expression, ExpressionConverter converter)
場所 LambdicSql.ConverterServices.ExpressionConverter.Convert(NewExpression newExp)
場所 LambdicSql.ConverterServices.ExpressionConverter.Convert(Expression exp)
場所 LambdicSql.ConverterServices.ExpressionConverter.Convert(UnaryExpression unary)
場所 LambdicSql.ConverterServices.ExpressionConverter.Convert(Expression exp)
場所 LambdicSql.ConverterServices.ExpressionConverter.Convert(BinaryExpression binary)
場所 LambdicSql.ConverterServices.ExpressionConverter.Convert(Expression exp)
場所 LambdicSql.ConverterServices.ExpressionConverter.ConvertToCode(Object obj)
場所 LambdicSql.ConverterServices.ExpressionConverter.CreateCode(DbInfo dbInfo, Expression core)
場所 LambdicSql.Db`1.Sql[TResult](Expression`1 expression)
場所 LambdicSqlTest.Program.Test2(ICondWithPaging cond) (C:\Users\shinsuke-oda\source\repos\LambdicSqlTest\LambdicSqlTest\Program.cs):行 56
場所 LambdicSqlTest.Program.Main(String[] args) (C:\Users\shinsuke-oda\source\repos\LambdicSqlTest\LambdicSqlTest\Program.cs):行 31
version
LambidcSql:0.69.0
LambdicSql.SqlServer:0.29.0
.NET Framework、.NET Core でも同様。
再現コード
Stacktrace