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
}