提问人:Abhishek Kumar 提问时间:8/12/2023 最后编辑:Abhishek Kumar 更新时间:8/12/2023 访问量:73
在 C 语言中从 List<List<T>> 中提取数据#
extract data from List<List<T>> in C#
问:
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();
答:
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();
评论
实体。选择Many(...)
以拼合列表。as string
.ToList()
data
.Select(field => field.data).ToList()