在 C 语言中从 List<List<T>> 中提取数据#

extract data from List<List<T>> in C#

提问人:Abhishek Kumar 提问时间:8/12/2023 最后编辑:Abhishek Kumar 更新时间:8/12/2023 访问量:73

问:

class FieldType
{
    string Id {get; set;}
    string dataType {get;set;}
}


class Field
{ 
    int fId{get;set;} 
    string fName{get;set;}
    FieldType fType{get;set;}
    string data;
}

class Entity
{
    int eId{get;set;}
    string eName{get;set;}
    List<Field> fields{get;set;}
}
List<Entity> entities = some entities;

现在,从实体列表中,我希望字段的数据位于具有某些条件的字符串列表中。如下图所示,但它给了我 List<List<string>>

var fields = entities.Select(entity => entity.Fields.Where(field => field.FieldType.Id.Contains(fieldTypeId) && !string.IsNullOrEmpty(field.Data as string))
                                                .Select(data => data.Data as string)
                                                .ToList()).ToList();
C 实体框架 LINQ C#-4.0

评论

1赞 Xerillio 8/12/2023
你可能想要实体。选择Many(...)以拼合列表。
0赞 jdweng 8/12/2023
你有一个 List<Entity>每个实体都有一个 List<Field>所以这就是你得到一个二维数组的原因。
0赞 KamielDev 8/12/2023
您不必将字符串转换为字符串。所以可以被排除在外。然后,您可以通过在 lambda 之后包含这些字符串来将这些字符串转换为字符串列表。只是做as string.ToList()data.Select(field => field.data).ToList()

答:

0赞 Orion 8/12/2023 #1
var fields = entities
    .SelectMany(e => e.fields)
    .Where(f => f.FieldType.Id.Contains(fieldTypeId)
             && !string.IsNullOrEmpty(f.Data))
    .Select(f => f.Data)
    .ToList();
0赞 Finlay 8/12/2023 #2

很难理解您到底想要什么,但我的猜测是您正在尝试根据某些条件从实体列表中提取特定字段的数据,但您得到的是一个嵌套列表而不是字符串的平面列表。若要实现目标并获得包含满足条件的字段数据的简单列表,可以使用 SelectMany LINQ 运算符。以下是修改代码的方法:

var fieldsData = entities.SelectMany(entity => entity.Fields
                                     .Where(field => field.fType.Id.Contains(fieldTypeId) && !string.IsNullOrEmpty(field.data))
                                     .Select(field => field.data))
                         .ToList();

此代码平展字符串列表,特别是来自“entities”变量的字符串列表。它处理列表中的每个“实体”及其对应的“字段”对象。该代码根据特定条件筛选这些字段,并提取所需的字段数据。最终,它会创建一个包含此提取数据的列表,从而消除任何嵌套列表。

我不是专业人士,但这可能是调整它可以满足您需求的一种方法!

0赞 jdweng 8/12/2023 #3

我会使用以下来获取开斋节和 fid

            var fields = entities.SelectMany(entity => entity.fields
                                    .Where(field => field.fType.Id.Contains(fieldTypeId) && !string.IsNullOrEmpty(field.data as string))
                                    .Select(field => new { eid = entity.eId, fid = field.fId, data = field.data} ))
                                 .ToList();