LINQ从多层类中选择第一项

本文关键字:一项 选择 LINQ | 更新日期: 2023-09-27 18:17:25

我有以下类:

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...)下失效。我需要怎样更改对账单?

LINQ从多层类中选择第一项

Where在本例中返回IEnumerable<T>,而这不是一个布尔值。您需要使用的是.Any()

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

明白了

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