【发布时间】:2013-12-23 23:55:01
【问题描述】:
我正在尝试将临时查询组装到 Breeze。
我有一个医生.联系人.地址关系。
当我尝试时:
myPred = new pred('contact.addresses.street1', op.StartsWith, "a");
然后执行我得到:
“属性“地址”的属性访问的父值不是单个值。属性访问只能应用于单个值。”
为了尝试解决方法,我尝试解析出那些多关系并将其传递给 .withParameters 中的微风控制器,如下所示:
var criteriaStr = toManyArray.length ? ko.utils.stringifyJson(toManyArray) : "";
query = query.withParameters({ searchParms: criteriaStr });
其中 toManyArray 是 fieldName:value 对的数组。
在控制器端:
[HttpGet]
public IQueryable<Physician> Physician(string searchParms = null)
{
if (searchParms != null)
{
var ser = new JavaScriptSerializer();
var searchCritAry = ser.Deserialize<String[]>(searchParms);
foreach (var aryItem in searchCritAry)
{
// aryItem looks like this:
// f_str_street_from_addresses:a
var predEnt = aryItem.Split(':')[0].Split('_')[4];
var predField = aryItem.Split(':')[0].Split('_')[2];
var predVal = aryItem.Split(':')[1];
switch (predEnt)
{
case "addresses":
switch (predField)
{
case "street":
//physPool =
_contextProvider.Context.Physicians
.Where(p => p.Contact.Addresses.Any(a => a.Street1.StartsWith(predVal)));
break;
case "street2":
//physPool =
_contextProvider.Context.Physicians
.Where(p => p.Contact.Addresses.Any(a => a.Street2.StartsWith(predVal)));
break;
}
break;
}
}
// here I want to combine the .Where clauses from above with the breeze preds
return _contextProvider.Context.Physicians;
}
return _contextProvider.Context.Physicians;
}
它不起作用,仅使用通过 Breeze 查询以正常方式传递的谓词返回选择。我看不到如何将过滤后的 IQueryable 传递给 Breeze 的 _contextProvider。
感谢您的任何建议。
【问题讨论】: