我有两个DB表,一个表包含许可证密钥(激活),另一个表具有每个许可证密钥的序列号(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'
如何迭代并将每个比较结果添加到列表中?
答案 0 :(得分:0)
如果要迭代每个id,第二部分中的错误是您没有实例化temp
import { Pipe, PipeTransform } from "@angular/core";
@Pipe({
name: "sort"
})
export class ArraySortPipe implements PipeTransform {
transform(array: any, field: string): any[] {
if (!Array.isArray(array)) {
return;
}
array.sort((a: any, b: any) => {
if (a[field] < b[field]) {
return -1;
} else if (a[field] > b[field]) {
return 1;
} else {
return 0;
}
});
return array;
}
}
但是,如果您想一次使用它,而您的查询在第一部分中
List<long> temp = new List<long>();
仅接受一个值。
尝试将long列表转换为()中带有逗号的字符串
Id = @value
并将您的sql更改为
List<long> list = new List<long>() {1,2,3}; //list of ids
string convertedListOfLong = string.Join(", ", list);
答案 1 :(得分:0)
在使用temp
变量之前,应先对其进行初始化。例如这样的
List<long> temp = new List<long>(); //<==== HERE
foreach (var i in id) {
//...
temp.Add(a);
}