我有一个模型调用地址,使用该模型我创建了一些 crud 操作,在执行此操作的过程中,我想要一种可以基于任意数量的属性创建查询的方法:
public static IEnumerable<address> GetByParams(Expression<Func<address, bool>> predicate, int? pageNumber, int? pageSize)
{
using (IDbConnection db = DbFactory.OpenDbConnection())
{
if ((pageNumber != null) && (pageSize != null))
{
var data = db.Where<address>(predicate).Skip((int) pageNumber).Take((int) pageSize).ToList();
if (data.Any())
{
data[0].TotalCount = data.Count();
data[0].TotalPages = (int) (data.Count()/pageSize);
}
return data;
}
//this is the code that creates the error
return db.Where<address>(predicate);
}
}
然后我尝试使用以下方法测试此代码:
ViewBag.PossibleBilling = new SelectList(address.GetByParams(x=> x.AddressType == 2,null,null),0);
然而,这导致了有史以来最奇怪的错误:(错误不是来自 selectList )
The given key was not present in the dictionary.
我试图用谷歌搜索这个,但结果比实际错误更复杂。我想这与我没有将谓词设置为正确的类型有关,或者在我将谓词传递到 where 之前,谓词必须发生某些事情。
谓词的原因是我有一个为我生成所有这些的 TT 文件,所以我不知道属性名称并且需要保持异常。
编辑:
为了清楚地了解未来的阅读:我对 servicestack.ormlite 使用它:https ://github.com/ServiceStack/ServiceStack.OrmLite
我正在尝试创建一个 TT 文件来使用我的模型构建一些基本的 crud 方法,我在 ormlite 中找到了这段代码:
System.Collections.Generic.List<T> Where<T>(this System.Data.IDbConnection dbConn, object anonType) Member of ServiceStack.OrmLite.OrmLiteReadConnectionExtensions
其中对象 anonType 可以是我自己的查询/谓词
分页代码是错误的,但这不是错误的过程,drax 解决的问题是我使用了 Where,而我只需要一个带参数的选择。
此改进将代码的使用更改为以下过程:
public static List<T> Select<T>(this IDbConnection dbConn, Expression<Func<T, bool>> predicate)
此过程接受表达式并消除错误
谢谢