在c#?</someobject>中使用Linq返回没有特定属性的List <someobject>

时间:2014-10-29 10:59:33

标签: 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; }
    public List<Log> Log{ get; set; }
 }

如何返回不包含List<Log> Log属性的objekt列表?

Linq会优先

感谢您提供的任何帮助

3 个答案:

答案 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>();
        }

查看.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);

       }

答案 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
}