[英]Return a List<SomeObject> without a certain property using Linq in c#?
我有一个包含不同属性的对象,例如下面的对象:
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
属性的此对象的List<Log> Log
?
Linq将被认为
感谢您提供的任何帮助
您可以返回原始列表的匿名列表,如下所示;
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);
}
“不包括List Log属性”,我想你是说属性“ 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();
您不能只隐藏类的属性(您将其声明为公共)
选项1:尽管可以像Robson所写的那样将其设置为null(这不是很可靠,因为没有人期望包含始终为null的属性的类)
选项2:如果您在同一个地方使用该类,请使用Mez所写的匿名类型,尽管这听起来像是您想从外部使用中隐藏该Property。 (我不喜欢动态方法,dynamic关键字是为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
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.