关于
我不能使用LINQ现在,因为它实际上是一个动态类型
Linq still works with dynamic types。
关于
如果在列表中第一个的foreach的唯一途径,得到了不同的 IDS,然后在列表中再次的foreach不同,的foreach并添加 他们到一个列表<>?
没有,假设我理解你与动态类型所遇到的问题,你可以使用LINQ执行下列操作之一:
如果需要输出是一个列表的列表,以及在这个问题存储过程是在SqlDataReader执行结果的方式,你可以做到以下几点与Linq(代替我的示例值你自己的价值观,包括类型从dataRecord铸造):
IEnumerable<IEnumerable<YourType>> yourListOfLists;
using (var connection = new SqlConnection(someConnectionString))
using (var command = new SqlCommand(someStoreProcedureName, connection))
{
connection.Open();
command.CommandType = CommandType.StoredProcedure;
using (var reader = command.ExecuteReader())
{
yourListOfLists = reader.Cast<IDataRecord>()
.ToList()
.Select(dataRecord =>
new YourType()
{
VersionNumber = dataRecord.GetInt32(dataRecord.GetOrdinal("VersionNumber")),
Id = dataRecord.GetInt32(dataRecord.GetOrdinal("Id")),
FromType = dataRecord.GetString(dataRecord.GetOrdinal("FromType")),
FromStatusId = dataRecord.GetString(dataRecord.GetOrdinal("FromStatusId"))
})
.GroupBy(youObject => youObject.Id)
.Select(group => group.ToList())
.ToList();
}
}
如果你真的想要的东西是基于了一些标识的两种不同的列表:
IEnumerable<YourType> listOfId1;
IEnumerable<YourType> listOfId2;
using (var connection = new SqlConnection(someConnectionString))
using (var command = new SqlCommand(someStoreProcedureName, connection))
{
connection.Open();
command.CommandType = CommandType.StoredProcedure;
using (var reader = command.ExecuteReader())
{
var combinedList = reader.Cast<IDataRecord>()
.ToList()
.Select(dataRecord =>
new YourType()
{
VersionNumber = dataRecord.GetInt32(dataRecord.GetOrdinal("VersionNumber")),
Id = dataRecord.GetInt32(dataRecord.GetOrdinal("Id")),
FromType = dataRecord.GetString(dataRecord.GetOrdinal("FromType")),
FromStatusId = dataRecord.GetString(dataRecord.GetOrdinal("FromStatusId"))
});
listOfId1 = combinedList.Where(item => item.Id == 111111).ToList();
listOfId2 = combinedList.Where(item => item.Id == 222222).ToList();
}
}
请注意,最有可能有更好的方法比在本例所示执行存储过程。
是的。这是使用内置独立方法的最简单的方法,否则你必须构建自己的逻辑来遍历整个列表,通过检查元素是否已经存在于每个元素中,将每个元素添加到单独的列表(这将是不同的列表)列表和每个ID的2个单独列表。相反,我会建议你在这种情况下使用字典。 –
是的,我认为可能是这样。所以我首先浏览整个列表,并获得所有不同的ID。 (所以我有一个带有两个ID的List,然后遍历该列表,然后遍历主列表,其中id =当前的id。似乎有点粗略,但它起作用 –
Craig
虽然这是直接的方法 –