LINQ从多层类中选择第一项

时间:2015-10-12 20:18:37

标签: c# linq

我有以下课程:

public class IP_BankInfo
{
    public App.BankType BankType { get; set; }
    public string FileExtension { get; set; }
    public List<IP_BankRows> Rows { get; set; }
}
public class IP_BankRows
{
    public int RowIndex { get; set; }
    public List<IP_BankBindings> Bindings { get; set; }
}
public class IP_BankBindings
{
    public int ColumnIndex { get; set; }
    public string ExpectedHeader { get; set; }
    public string TransactionPropertyName { get; set; }
}

我正在尝试选择第一个IP_BankRows,如果它包含任何Bindings,其中TransactionPropertyName不为空。这是我的尝试:

var firstItem = info.Rows.FirstOrDefault(n => n.Bindings.Where(x => !string.IsNullOrWhiteSpace(x.TransactionPropertyName)));

但在第二个条件(n=>n.Bindings...)失败。我如何更改我的陈述?

2 个答案:

答案 0 :(得分:1)

在这种情况下,

Where返回IEnumerable<T>,这不是布尔值。您需要使用的是.Any()

var firstItem = info.Rows.FirstOrDefault(n => n.Bindings.Any(x => !string.IsNullOrWhiteSpace(x.TransactionPropertyName)));

答案 1 :(得分:0)

知道了。

var firstItem = info.Rows.Where(
    n => n.Bindings.Any(
        x => !string.IsNullOrWhiteSpace(x.TransactionPropertyName)
    )
).FirstOrDefault();