c# - 如何将循环迭代结果存储到列表中?
问题描述
我有两个数据库表,一个包含许可证密钥(激活),另一个包含每个许可证密钥的序列号(LicenseSerialNumbers)。LicenseSerialNumbers 表的主键是 Activations 表中 licenseID 列的外键 (LicenseSerialNumbers.ID == Activations.licenseID )
现在,由于业务需求,我已经过滤了 Activations 表结果以仅获取针对产品序列号激活的密钥。我在 List currentKey 中有这个结果
var currentKey = context.Activations.SqlQuery("SELECT * FROM Activations where JSON_VALUE(ActivationInfo, '$.SerialNumber')=@value", new SqlParameter("@value", activationinfo)).ToList();
我为这两个模型创建了 ViewModel 以组合表格结果
public class LicenseSerialNumberViewModel
{
public List<Activation> Activations { get; set; }
public List<LicenseSerialNumber> LicenseSerialNumber { get; set; }
}
列表加入:
var data = new LicenseSerialNumberViewModel();
var result = data.LicenseSerialNumber.Join(data.Activations, l => l.Id, a
=> a.licenseID, (LId, serial) => new{LId = LId.SerialNumber});
我希望在一个视图中发布两个表的值。必须将过滤后的激活表行与 LicenseSerialNumber 表/类进行比较并传递到视图中。
问题:我没有得到预期的结果。我是编程新手,到目前为止,我取得了进展,并陷入了 SqlQuery 函数只能采用原始类型变量的地方。但结果 currentkey 是一个列表。
var currentKey = context.Activations.SqlQuery("SELECT * FROM Activations where JSON_VALUE(ActivationInfo, '$.SerialNumber')=@value", new SqlParameter("@value", activationinfo)).ToList(); var id = currentKey.Select(a => a.LicenseSerialNumberId).ToList();
var data = context.LicenseSerialNumbers .SqlQuery("Select * from LicenseSerialNumbers where Id =@value", new SqlParameter("@value", id)).ToList();
在上面的代码中,我传递给 @value 参数的 id 是一个列表。但是 SqlQuery 函数只接受原始变量。
如何迭代 id 值并使变量数据成为列表?我尝试了 foreach 和 for 循环来迭代 id 列表,但无法将输出从循环范围中取出。
List<long> temp;
foreach (var i in id) {
var a = context.LicenseSerialNumbers.SqlQuery("Select * from LicenseSerialNumbers where Id =@value", new SqlParameter("@value", i)).Single();
temp.Add(a);
}
错误:使用未分配的局部变量“temp”
如何迭代并将每个比较结果添加到列表中?
解决方案
如果你想迭代每个 id 第二部分的错误是你没有实例化 temp
List<long> temp = new List<long>();
但是,如果您想一次性完成并在第一部分进行查询
Id = @value
只会接受一个值。
尝试将 long 列表转换为 () 内带有逗号的字符串
List<long> list = new List<long>() {1,2,3}; //list of ids
string convertedListOfLong = string.Join(", ", list);
并将您的 sql 更改为
string.Format("Select * from LicenseSerialNumbers where Id IN ({0})", convertedListOfLong);
推荐阅读
- javascript - @Url.Action 和 JavaScript
- javascript - 你如何在php中的输入之间切换?
- python - Python tkinter 在类或帧之间传递变量
- c# - 以编程方式获取 BIOS 引导菜单键
- python - Geoviews + Datashader在投影点时很慢
- mysql - 未来预期销售查询的功能将不会运行 - MySQL
- powershell - 如何捕获异常以使异常消息不在控制台上打印?
- python - Python CSV 文件读取和保存
- c# - 相关删除性能问题
- machine-learning - 正在寻找合适的方法来根据残差或预测误差检查模型的优劣?