我正在使用 Include() 将相关对象添加到查询结果中。但是,我不希望结果集中相关表的所有字段。我设法提出了以下解决方案,该解决方案有效,但是没有更好的方法吗?
由于客户端的限制,我不能返回一个新类型,只有想要的字段。我需要返回正确的类型(Models.Message)。
private void LimitProperties(object entity, List<string> keepProps) {
if (entity == null)
{
return;
}
PropertyInfo[] props = entity.GetType().GetProperties();
foreach (PropertyInfo prop in props)
{
if (!keepProps.Contains(prop.Name))
{
prop.SetValue(entity, null);
}
}
}
public Models.Message GetMessageByID(int messageID) {
List<string> _validProps = new List<string> { "ID", "Name", "Title" };
Models.Message message = DbContext.Messages
.Include(m => m.RefChannel)
.Include(m => m.RefSender)
.Include(m => m.RefRecipient)
.FirstOrDefault(m => m.ID == messageID);
// limit the number of returned fields
if (message != null)
{
LimitProperties(message.RefChannel, _validProps);
LimitProperties(message.RefSender, _validProps);
LimitProperties(message.RefRecipient, _validProps);
}
return message;
}