在MVC项目我的工作,我有一个剑道DROPDOWNLIST调用我的服务器采取行动,执行任何读操作(incluse过滤):System.Linq.Expressions与计算列
ServiceRequestAssociabili([DataSourceRequest] DataSourceRequest request, int? idServiceRequestOriginale)
小部件是绑定到2个属性: IdServiceRequest(值)和IdServiceRequestDescrizione(文本)。
IdServiceRequest是实体ID和IdServiceRequestDescrizione是计算列至极我已经在部分类的实体
public string IdServiceRequestDescrizione
{
get
{
if (TipologiaChiamata.IdTipologiaChiamata != (int)Enums.TipologiaChiamata.Automatica)
{
return IdServiceRequest + " " + Note;
}
else
{
return IdServiceRequest + " " + Email.EmailOggetto;
}
}
}
定义为了创建正确的LINQ查询来执行我创建了一个系统的过滤器。 Linq.Expression我的实体转化为含2个属性DTO:
Expression<Func<ServiceRequest, DTO>> funcError = s => new DTO
{
IdServiceRequest = s.IdServiceRequest,
IdServiceRequestDescrizione = s.IdServiceRequestDescrizione
};
然后我用这句话来项目我的IQueryable:
var srq = _serviceRequestRepository.GetByParametersAsQueryable(idServiceRequestOriginale: idServiceRequestOriginale, senzaTicketAssociato: true).Select(funcError).ToList();
如果我,而不是在部分限定IdServiceRequestDescrizione我定义它的System.Linq.Expression不会引发错误和里面的一切工作正常。
Expression<Func<ServiceRequest, DTO>> func = s => new DTO
{
IdServiceRequest = s.IdServiceRequest,
IdServiceRequestDescrizione = s.TipologiaChiamata.IdTipologiaChiamata != (int)EntityModel.Enums.TipologiaChiamata.Automatica ? s.IdServiceRequest + " " + s.Note : s.IdServiceRequest + " " + s.Email.EmailOggetto
};
有人能给我这种行为的专业解释吗?为什么我不能在linq Expression中引用自定义属性?
是不是LINQ。用c#实现的表达式呢?在我的场景中,我无法实现该指令中的实体,因为额外的过滤器应用于Iqueryable对象。要清楚:在投影到DTO之后必须使用ToList()。 –
这个问题基本上是一样的问题:** http://stackoverflow.com/questions/14726285/custom-properties-and-lambda-expressions** –