我有问题在linq查询的<body ng-app="app" ng-controller="testCtrl">
<div ng-repeat="test in tests">
<p>{{test.test}}</p>
</div>
</body>
子句中使用函数,如下面的代码所示。
返回where
对象的函数:
IEnumerable
返回private IEnumerable filterparameter(string filter)
{
EmailAflAwmMessageDM obj = new EmailAflAwmMessageDM();
if (filter == "attachments")
{
return obj.attachments;
}
else if (filter == "flagged")
{
return obj.flagged;
}
else
{
return obj.seen;
}
}
的函数,将在web api函数中使用:
IQuerable
更新:此错误
private IQueryable SearchFilterCondition(string filter,string value)
{
var emailmessage = from a in db.EmailAflAwmMessage
where (filterparameter(filter) == value)
orderby a.msg_date descending
select new
{
a.subject,
a.msg_date,
};
return emailmessage;
}
请帮助我解决此问题或指导我使用替代方案。
答案 0 :(得分:4)
作为@Domysee提到你不能在Linq查询中调用任何c#函数。只有EntitiFunctions 这就是为什么表达式已经构建的原因。要在linq查询中使用
public Expression<Func<EmailAflAwmMessage, bool>> GetSelectXpr(string filter, string value)
{
if (filter == "attachments")
return e => e.attachments == value;
else if (filter == "flagged")
return e => e.flagged == value;
else
return e => e.seen == value;
}
使用。
var selectXpr = GetGetSelectXpr(filter,value);
var emailmessage = db.EmailAflAwmMessage.Where(selectXpr).OrderByDescending(a=>a.msg_date).Select(a=>
new {
a.subject,
a.msg_date
})
答案 1 :(得分:3)
不幸的是,在Where
的{{1}}内使用方法是不可能的,因为Linq to SQL无法知道如何将方法转换为SQL。
您必须将方法内嵌到IQueryable
才能使其正常工作
这样的事情:
Where