繁体   English   中英

返回清单 <SomeObject> 没有在C#中使用Linq的特定属性?

[英]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>();
        }

看看.Select()以及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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM