public SqlQuery Where<T>(Expression<Func<T, bool>> expression) where T : new()
{
//ExpressionParser parser = new ExpressionParser();
IList<Constraint> c = expression.ParseConstraints();
/*
* 修 改 人:Empty(AllEmpty)
* QQ 群:327360708
* 博客地址:http://www.cnblogs.com/EmptyFS/
* 修改时间:2014-04-16
* 修改说明:在使用SqlQuery或Select查询时,由于_provider(即DbDataProvider)的Schema.Tables为null,执行FindTable时直接返回null值,
* 获取IColumn也是null值,所以使用获取的IColumn对相关变量进行赋值时就会产生System.NullReferenceException异常
* 异常信息:System.NullReferenceException: 未将对象引用设置到对象的实例。
*********************************************/
//获取当前泛型对应的Table
var iTable = _provider.FindTable(typeof (T).Name);
//如果为null,则创建它
if (iTable == null)
{
iTable = _provider.FindOrCreateTable<T>();
}
foreach(Constraint constrain in c)
{
//IColumn column = _provider.FindTable(typeof (T).Name).GetColumnByPropertyName(constrain.ColumnName); //原版本代码
IColumn column = iTable.GetColumnByPropertyName(constrain.ColumnName);
constrain.ColumnName = column.Name;
constrain.ConstructionFragment = column.Name;
constrain.DbType = column.DataType;
constrain.ParameterName = column.ParameterName;
constrain.QualifiedColumnName = column.QualifiedName;
constrain.TableName = column.Table.Name;
Constraints.Add(constrain);
}
return this;
}