C# 在列表中查找特定元素<&燃气轮机;如果找到元素,则获取该行的全部数据

C# 在列表中查找特定元素<&燃气轮机;如果找到元素,则获取该行的全部数据,c#,C#,我有一个列表,其中包含了在获得BillSheetDetail列表后的对象集合。我想找到billWorkDetails[]。details\u classification==“xyz”,如果找到了,则获取billWorksDetails[]的特定数组索引的所有数据并将其存储在其他阵列中以显示 我该怎么做?我是C的新手# 公共类BillSheetDetail { 公共日期时间创建\u日期{get;set;} 公共字符串customer_name{get;set;} 公共字符串主题{get;set;

我有一个
列表
,其中包含了在获得
BillSheetDetail
列表后的对象集合。我想找到
billWorkDetails[]。details\u classification==“xyz”
,如果找到了,则获取
billWorksDetails[]的特定数组索引的所有数据
并将其存储在其他阵列中以显示

我该怎么做?我是C的新手#

公共类BillSheetDetail
{
公共日期时间创建\u日期{get;set;}
公共字符串customer_name{get;set;}
公共字符串主题{get;set;}
公共十进制税率{get;set;}
公共整数总额{get;set;}
公共字符串特殊_指令{get;set;}
公共字符串注释{get;set;}
公共列表billWorkDetails{get;set;}
}
[可序列化]
公共类BillWorkDetail
{
公共字符串产品名称{get;set;}
公共十进制数量{get;set;}
公共字符串单元{get;set;}
公共整数单位成本{get;set;}
公共整数金额{get;set;}
公共字符串备注{get;set;}
public int row_no{get;set;}
公共字符串详细信息{get;set;}
} 
解决方案使用Where子句:

下面是运行良好的代码演示:

试试这个linq方法

List<BillWorkDetail> myBillWorkDetails = new Lis<BillWorkDetail>();

myBillWorkDetails  = myBillSheetDetail.billWorkDetails.Where(b => b.classifiction == "xyz").ToList();
List myBillWorkDetails=new Lis();
myBillWorkDetails=myBillSheetDetail.billWorkDetails.Where(b=>b.Classification==“xyz”).ToList();

此代码检索分类为xyz的所有BillWorkDetail。

您必须组合
可枚举。其中
任何

List<BillWorkDetail>[] matchingSheetDetails = billSheetDetailList
    .Where(sd => sd.billWorkDetails.Any(d => d.details_classifiction == "xyz"))
    .Select(sd => sd.billWorkDetails)
    .ToArray();

SelectMany
列表中选择所有匹配的
BillWorkDetail
。请注意,这两种方法都会丢失对它来源的
BillSheetDetail
实例的引用。

它是一个
列表
而不是数组。您可以使用linq查询并应用于其中子句,这是一个列表。我对linq不太了解。如果有人向我解释一些代码,我将不胜感激。这行不通,您无法从项目列表中访问属性。。。请参阅Tim Schmelter的答案以获得正确的解决方案。不,我不知道详细信息。分类是一个字符串。请看定义。
mySheetDetail
是一个
列表
,您尝试从列表访问单个属性感谢@Tim它对我有效。很抱歉我的问题不清楚,实际上我想要列表格式的。我用ToList()方法编辑了你的代码,它成功了。接受它作为答案是值得的
List<BillWorkDetail> myBillWorkDetails = new Lis<BillWorkDetail>();

myBillWorkDetails  = myBillSheetDetail.billWorkDetails.Where(b => b.classifiction == "xyz").ToList();
List<BillWorkDetail>[] matchingSheetDetails = billSheetDetailList
    .Where(sd => sd.billWorkDetails.Any(d => d.details_classifiction == "xyz"))
    .Select(sd => sd.billWorkDetails)
    .ToArray();
BillWorkDetail[] matchingBillWorkDetails = billSheetDetailList
    .SelectMany(sd => sd.billWorkDetails.Where(d => d.details_classifiction == "xyz"))
    .ToArray();