基于以下代码,如何访问另一个列表中的类列表。
我可以很好地访问“ datatosend”项,但是一旦到达dataGroup内部实例化的datagroupProject,我就不知道如何从datagroupProject和datagroupCabs中获取值。
如何获取和存储这些值,以便我可以使用它们?
foreach (dataGroup r in datatosend)
{
string tmpusrn = r.User;
string tmpNumProj= r.???
...
do something...
}
这是我存储数据的地方:
datatosend.Add(new dataGroup()
{
User = cUnum,
UserName = cUname,
Project = new List<datagroupProject>()
{
new datagroupProject
{
NumProj = cProNum,
headers = new List<datagroupCabs>()
{
new datagroupCabs
{
invoice = tmpinvoice,
datainv = tmpdate,
provider = tmpProov
}
}
}
}
});
这是我创建类的方式:
public class dataGroup
{
public string User { get; set; }
public string UserName { get; set; }
public List<datagroupProjects> Project { get; set; }
}
public class datagroupProject
{
public string NumProj { get; set; }
public List<datagroupCabs> headers { get; set; }
}
public class datagroupCabs
{
public string invoice { get; set; }
public string datainv { get; set; }
public string provider { get; set; }
public List<datagrouplines> refs { get; set; }
}
以下是整件事,以备不时之需:
namespace testinv
{
class Program
{
static void Main(string[] args)
{
_GLOBALS.InitAll();
GetUsersData();
}
public class dataGroup
{
public string User { get; set; }
public string UserName { get; set; }
public List<datagroupProjects> Project { get; set; }
}
public class datagroupProject
{
public string NumProj { get; set; }
public List<datagroupCabs> headers { get; set; }
}
public class datagroupCabs
{
public string invoice { get; set; }
public string datainv { get; set; }
public string provider { get; set; }
public List<datagrouplines> refs { get; set; }
}
public static void GetUsersData()
{
Console.WriteLine("Init");
string cUnum = "";
string cUname = "";
string cProNum = "";
List<dataGroup> datatosend = new List<dataGroup>();
List<datagroupProject> datatosendproj = new List<datagroupProject>();
List<datagroupCabs> datatsendCabs = new List<datagroupCabs>();
DataTable dtUsers = new DataTable();
dtUsers = BSTOOLS.GetUserData("");
foreach (DataRow u in dtUsers.Rows)
{
cUnum = u.ItemArray[0].ToString();
cUname = u.ItemArray[1].ToString();
DataTable dtProjects = new DataTable();
dtProjects = BSTOOLS.GetProjects(cUnum);
foreach (DataRow p in dtProjects.Rows)
{
cProNum = p.ItemArray[0].ToString();
DataTable dtlines = new DataTable();
dtlines = BSTOOLS.DistinctGetDeliveryNotesLines(cProNum);
foreach (DataRow l in dtlines.Rows)
{
string tmpinvoice = "";
string tmpdate = "";
string tmpProov = "";
string tmpiClave = l.ItemArray[0].ToString();
DataTable resultCab = new DataTable();
resultCab = BSTOOLS.checkifFlow(tmpiClave);
if(resultCab.Rows.Count > 0)
{
foreach (DataRow c in resultCab.Rows)
{
tmpinvoice = c.ItemArray[0].ToString();
tmpdate = c.ItemArray[1].ToString();
tmpProov = c.ItemArray[2].ToString();
}
datatosend.Add(new dataGroup()
{
User = cUnum,
UserName = cUname,
Project = new List<datagroupProject>()
{
new datagroupProject
{
NumProj = cProNum,
headers = new List<datagroupCabs>()
{
new datagroupCabs
{
invoice = tmpinvoice,
datainv = tmpdate,
provider = tmpProov
}
}
}
}
});
}
}
}
}
}
}
}
谢谢您的时间。
[需要澄清的内容]
@博斯科 @朱Zhu
基本上,我需要数据组中的每个用户,在datagroupProject中遍历他的项目,以获取项目和datagroupCabs中的所有项目(这是datagroupproject中的另一个List类)。所以最终会变成这样:
user1
project1
inv1
inv2
project2
inv1
user2
...
我可以访问datagroupProject并获取值,但是如何访问其中的列表datagroupCabs并遍历它呢? 希望这可以澄清我的需求。 再次感谢您的宝贵时间。
答案 0 :(得分:1)
只是获得您添加的第一个值:
string tmpNumProj= r.Project?.FirstOrDefault()?.NumProj ?? string.Empty;
您需要添加
using System.Linq;
到文件的开头。
但这仅适用于第一项。 看起来您是C#的新手,只需查看一些文档和教程即可。
我为所有不知道如何访问列表中的列表以及如何使用linq的人添加了完整的教学解决方案。