我有两个数据库表,一个表包含许可证密钥(激活),另一个表具有每个许可证密钥的序列号(LicenseSerialNumbers)。LicenseSerialNumbers表的主键是激活表中的licenseID列的外键(LicenseSerialNumbers.ID == Activations.licenseID)
现在,我已经过滤了激活表结果,以便仅根据业务需求针对产品序列号激活密钥。我在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”
如何迭代并将每个比较结果添加到列表中?
您应该在使用temp
变量之前对其进行初始化。例如这样的:
List<long> temp = new List<long>(); //<==== HERE
foreach (var i in id) {
//...
temp.Add(a);
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句