我想要做的是,当用户进行搜索并且查询未返回结果时。我希望能够记录在另一个表中搜索的字符串。
我正在尝试做的事情似乎应该是直截了当的......我的第一个方法是获得PreprocessQuery的计数。
我试过的例子:
int count = 0;
partial void QueryName_PreprocessQuery(string ParamName, ref IQueryable<TableName> query)
{
if (ParamName != null)
{
query = query.Where(a => a.PropertyName.Contains(ParamName));
count = query.Count();
}
}
当我放置断点并逐步完成此方法时。 count
始终为0,query
始终为空。奇怪的是,这个查询仍然带回了正确的结果。我尝试了各种不同的方法,甚至开始了一个新的Lightswitch项目,只有一个屏幕和一个查询。相同的结果。
我尝试过的另一个例子:
partial void QueryName_PreprocessQuery(string ParamName, ref IQueryable<TableName> query)
{
if (ParamName != null)
{
count = query.Count(a => a.Serial_No.Contains(SerialNumber));
}
}
除了验证query
为空并且count
为0之外,此方法实际上不执行任何操作。再次......正确的结果仍显示在我的屏幕上。
所以这让我相信也许我不应该试图通过_PreProcessQuery
方法计算?
答案 0 :(得分:0)
我相信你是对的。尝试从QueryName_PreprocessQuery更改为QueryName_Executed。
QueryName_PreprocessQuery
在查询形成时和执行之前发生。
QueryName_Executed
在执行查询后立即调用,因此应该为您提供您尝试获取的信息。
您可以尝试这样的事情:
partial void QueryName_Executed(QueryExecutedDescriptor queryDescriptor)
{
int resultCount = queryDescriptor.Results.Count();
}