LINQ高级查询3级

时间:2014-07-25 08:18:36

标签: c# linq

这是我的对象:

控制台:Playstation

Type : PSX
    Price : 100
    AvailableIn : [ "USA", "JAPAN" ]
Type : PS3
    Price : 250
    AvailableIn : []        
Type : PS4      
    Price : 500
    AvailableIn : [ "USA", "JAPAN" ]

控制台:XBOX

Type : XBOX 360
    Price : 100
    AvailableIn : []
Type : XBOX One
    Price : 250
    AvailableIn : [ "USA", "JAPAN" ]

控制台:GameBoy

Type : GBC
    Price : 100
    AvailableIn : [ "USA", "JAPAN" ]
Type : GBA
    Price : 250
    AvailableIn : []


嗨,大家好, 我需要一个LINQ查询来选择所有可用的控制台,如果" AvailableIn"不是空的 这是我预期的结果:

控制台:Playstation

Type : PSX
    Price : 100
    AvailableIn : [ "USA", "JAPAN" ]
Type : PS4      
    Price : 500
    AvailableIn : [ "USA", "JAPAN" ]

控制台:XBOX

Type : XBOX One
    Price : 250
    AvailableIn : [ "USA", "JAPAN" ]

控制台:GameBoy

Type : GBC
    Price : 100
    AvailableIn : [ "USA", "JAPAN" ]

谢谢,

我确实尝试了

var models = Consoles
    .Where(c => c.Types.Any(t => t.AvailableIn.Count() != 0))

但它对我不起作用。

2 个答案:

答案 0 :(得分:0)

这应该有用。

var models = Consoles.Where(x=>x.Types.Any(t=>t.AvailableIn.Any()));

答案 1 :(得分:0)

  

如果“AvailableIn”不为空

null与0不同,也许你想要:

var models = Consoles
    .Where(c => c.Types.Any(t => t.AvailableIn != null && t.AvailableIn.Any()));

评论其他答案:

  

我仍然得到Type:XBOX 360价格:100 AvailableIn:[]和   类型:GBA价格:250 AvailableIn:[]仍在结果中,我   如果可用性= null

,我们想要摆脱这些类型

我想你想要排除所有控制台,如果它的任何类型都不可用,那是正确的吗?

然后All应该有效:

var models = Consoles
    .Where(c => c.Types.All(t => t.AvailableIn != null && t.AvailableIn.Any()));

如果您只想排除所有不可用的控制台类型,则需要创建没有这些类型的Console的新实例:

var models = Consoles
    .Where(c => c.Types.Any(t => t.AvailableIn != null && t.AvailableIn.Any()))
    .Select(c => new Console
    {
        AvailableIn = c.Types
                       .Where(t => t.AvailableIn != null && t.AvailableIn.Any()),
        OtherProperties ....
    });