C# 在c中使用Linq返回没有特定属性的列表?
我有一个包含不同属性的对象,如下面的对象:C# 在c中使用Linq返回没有特定属性的列表?,c#,linq,C#,Linq,我有一个包含不同属性的对象,如下面的对象: public class CompressedLogResponse { public string LoggerType { get; set; } public int NumberOfRegisters { get; set; } public int NewLogId { get; set; } public DateTime LoggerAnnounceTime { get; set; } publ
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属性的此对象的列表
林克会被优先考虑的
感谢您提供的任何帮助您可以返回原始列表的匿名列表,如下所示
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>();
}
其中不包括List Log属性,我猜您的意思是,属性public List Log将被清除,但仍然存在,因此您可以将该属性设置为null,因为如果您创建的对象不包含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编写的匿名类型,尽管听起来您想隐藏该属性以防外部使用。我不喜欢动态方法,dynamic关键字是为interop/DOM创建的,而不是用于传输匿名类型 备选案文3: 如果希望在不返回Log属性的情况下返回此类型的列表,则必须创建一个新的类继承,这是实现此目的的一个好方法:
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; }
}
现在,您可以返回根本没有日志属性的基本项列表
public List<CompressedLogResponseBase> ReturnWithoutLog(IEnumerable<CompressedLogResponse> items)
{
return ((IEnumerable<CompressedLogResponseBase>)items).ToList();
}
如果IEnumerable作为返回类型是足够的,那么它就变得非常容易了
public IEnumerable<CompressedLogResponseBase> ReturnWithoutLog(IEnumerable<CompressedLogResponse> items)
{
return items
}
此类上的所有对象都具有该属性。您指的是日志列表为null或为空的日志列表吗?仅使用Linq您查看的是。SELECT如果没有Log属性,则无法返回CompressedLogResponse列表。但是,您可以返回不带该属性的匿名类型。您对“不包含”是什么意思?通过“不包含”,我了解列表之外的所有属性。通过使用原始列表,使用它创建一个匿名类型列表并删除不需要的属性-我认为OP将获得所需的结果。如果需要将结果返回给调用方,那么这将不起作用,因为列表中的类型是匿名的。如果OP将在当前上下文外使用,我们没有足够的信息。我们所知道的是列表不是必需的,我们更喜欢使用Linq。也许你说的是,选择一个匿名列表。返回匿名类型是不可能的。为什么要投否决票@Dom84是的,我更新了我的答案。为什么我不想在这种情况下使用动态?
public IEnumerable<CompressedLogResponseBase> ReturnWithoutLog(IEnumerable<CompressedLogResponse> items)
{
return items
}