我有一个包含不同属性的对象,如下面的对象:
public class CompressedLogResponse
{
public string LoggerType { get; set; }
public int NumberOfRegisters { get; set; }
public int NewLogId { get; set; }
public DateTime LoggerAnnounceTime { get; set; }
public List<Log> Log{ get; set; }
}
如何返回不包含List<Log> Log
属性的objekt列表?
Linq会优先
感谢您提供的任何帮助
答案 0 :(得分:0)
您可以返回原始列表的匿名列表,如下所示;
public static List<dynamic> Test() {
List<CompressedLogResponse> list = new List<CompressedLogResponse>();
var result = list.Select(x => new
{
x.LoggerAnnounceTime,
x.LoggerType,
x.NewLogId,
x.NumberOfRegisters
});
return result.ToList<dynamic>();
}
然后调用它,
var x = Test();
foreach(dynamic o in x)
{
int NumberOfRegisters;
//You have 2 ways... either by
NumberOfRegisters = o.NumberOfRegisters;
// or reflection
NumberOfRegisters = o.GetType().GetProperty("NumberOfRegisters").GetValue(o, null);
}
答案 1 :(得分:0)
whith“不包含List Log属性”我想你的意思是属性“public List Log”将被清空但仍然存在,所以你可以将该属性清空,因为如果你创建了一个没有的对象t包含“public List Log”属性,它不是“CompressedLogResponse”,而是另一种类型。
List<CompressedLogResponse> listOne = new List<CompressedLogResponse>();
//....
//fill the listOne
//....
List<CompressedLogResponse> listWithoutListLog = (from item in listOne
select new CompressedLogResponse(
LoggerType = item.LoggerType,
NumberOfRegisters = item.NumberOfRegisters ,
NewLogId = item.NewLogId ,
LoggerAnnounceTime = item.LoggerAnnounceTime ,
Log= null)).ToList();
答案 2 :(得分:0)
您不能只隐藏类的属性(您将其声明为公共属性)
选项1: 尽管Robson写道你可以将它设置为null(这不是非常可靠,因为没有人期望一个包含永远为null的属性的类)
<强>选项2:强> 如果您在同一个地方使用该类,请使用Mez编写的匿名类型,但听起来您希望隐藏该属性以免外部使用。 (我不喜欢动态方法,动态关键字是针对interop / DOM而不是用于传输匿名类型。)
<强>选项3:强> 如果要在没有Log属性的情况下返回此类型的List,则必须创建一个新类(继承是实现此目的的一种好方法):
public class CompressedLogResponseBase
{
public string LoggerType { get; set; }
public int NumberOfRegisters { get; set; }
public int NewLogId { get; set; }
public DateTime LoggerAnnounceTime { get; set; }
}
public class CompressedLogResponse : CompressedLogResponseBase
{
public List<Log> Log{ get; set; }
}
现在您可以返回一个基本项目列表(根本没有Log属性)
public List<CompressedLogResponseBase> ReturnWithoutLog(IEnumerable<CompressedLogResponse> items)
{
return ((IEnumerable<CompressedLogResponseBase>)items).ToList();
}
如果一个IEnumerable作为返回类型是足够的,它变得非常容易
public IEnumerable<CompressedLogResponseBase> ReturnWithoutLog(IEnumerable<CompressedLogResponse> items)
{
return items
}