【发布时间】:2011-09-01 10:28:22
【问题描述】:
我正在尝试将电报列表排序为奴隶列表。
如果 PrimeAddress 和 SecondaryAddress 匹配,则报文属于从站。
设备存储在数据表中。
我想检查设备是否已经包含电报。
我的第一次尝试看起来像这样:
public static DataTable mdlform_NewMBUStele(int LoggerID, List<MbusTelegram> mList, DataTable _deviceDataTable)
{
//TODO Das ist total dirty und gar nicht clean hier...
foreach (DataRow dRow in _deviceDataTable.Rows)
{
if (dRow.ItemArray[3] is Slave)
{
foreach (MbusTelegram mb in mList)
{
int primeID = (int)dRow.ItemArray[1];
if (primeID == LoggerID)
{
Slave slv = (Slave)dRow.ItemArray[3];
foreach (MbusTelegram mbus in mList)
{
if (slv.PrimeAddress == mbus.Header.PrimeAddress && slv.SecondaryAdd == mbus.FixedDataHeader.SecondaryAddress)
{
if (slv.ListOfTelegramms == null)
{
slv.ListOfTelegramms = new List<MbusTelegram>();
}
if (!slv.ListOfTelegramms.Contains(mbus))
{
slv.ListOfTelegramms.Add(mbus);
//TODO Check if the slave already contains the telegramm, if so don't add it..
}
}
}
}
}
}
}
return _deviceDataTable;
}
数据表的结构:
private void IniDataTable()
{
_deviceDataTable = new DataTable("Table");
_deviceDataTable.Columns.Add("ID", typeof(int));
_deviceDataTable.Columns.Add("IDParent", typeof(int));
_deviceDataTable.Columns.Add("Name", typeof(string));
_deviceDataTable.Columns.Add("Object", typeof(object));
_deviceDataTable.Rows.Add(new object[] { 0, DBNull.Value, "Addressen", null });
//GenerateDummyDataTable();
IniDeviceTreeView();
}
此代码不能很好地工作,它不会检查设备是否已经包含电报。有更好的想法吗?
【问题讨论】:
-
你应该在问题中提供表格结构
-
好的,请稍等...
-
一些 cmets 只是通过阅读: 1.) 不要对列使用那些讨厌的索引(3 = Object 等) - 即使像“Object”这样的魔术字符串也比这更好。 2.) 考虑使用类型化的表格 - 而不是你不需要 - 做你的问题:没有看到这些东西是什么,我肯定没有更好的主意......
标签: c# linq list pattern-matching