在LINQ查询中不能得到继承类的IEnumerable

本文关键字:继承 IEnumerable LINQ 查询 不能 | 更新日期: 2023-09-27 18:17:06

我正试图将一些代码从VB转换到c#,并且在这个特定的LINQ查询中遇到了非常困难的时间。首先,我将展示这些类:

Public Class CompanyData
        Property CompanyID As String = ""
        Property VendorNumber As String = ""
        Property VendorName As String = ""
End Class
Public Class MultiCompData
        Inherits CompanyData
        Property ExpCompanyId As String = ""
End Class

然后在VB示例中,它所做的是在multiCompGroup字段中将所有分组为MultiCompData, foreach通过它并添加到CompanyData的不同列表,如果ExpCompanyId为空/空。代码:

Sub ProcessMultiCompData(multiCompDataJEs As IEnumerable(Of MultiCompData), ByRef multiCompData As List(Of CompanyData), ByRef undeterminedDists As List(Of CompanyData))
    Dim multiCompGroups =
        From m In multiCompDataJEs
        Group m By m.ExpCompanyId,
                   m.VendorNumber,
                   m.VendorName
        Into Group
    For Each grp In multiCompGroups
        If grp.ExpCompanyId = "" Then
            undeterminedDists.AddRange(grp.Group)

在foreach中,grp具有以下属性- ExpCompanyId, VendorNumber, VendorName和Group(这是我无法在c#中复制的部分)组是IEnumerable。是不是不可能在c#中添加IEnumerable到multiCompGroups??我试过了:

var multiCompGroups = from m in multiCompDataJEs group by new {m.ExpCompanyiD, m.VendorNumber, m.VendorName} into multiGroups 

multiGroups在我的grp值中没有显示为IEnumerable,当我到达foreach时,我也尝试过这样做:

var multiCompGroups = multiCompDataJEs.GroupBy(x => new {m.ExpCompanyId, m.VendorNumber, m.VendorName}).Select(y => new {y.Key.ExpCompanyId, y.Key.VendorNumber, y.Key.VendorName}).ToList();

两者生产相同的东西。当我执行grp时,有3个属性显示出来。但"进入组"(grp。组在上面的VB代码)不显示在c#中。这可能吗?

在LINQ查询中不能得到继承类的IEnumerable

你要找的c#是:

var multiCompGroups =
    from m in multiCompDataJEs
    group m by new {m.ExpCompanyiD, m.VendorNumber, m.VendorName} into multiGroups
    select multiGroups;
foreach(var grp in multiCompGroups)
{
    if(grp.Key.ExpCompanyId == "")
    {
        undeterminedDists.AddRange(grp);
    }
}