У меня есть две таблицы БД, одна из которых содержит лицензионные ключи (Активации), а другая - серийный номер каждого лицензионного ключа (LicenseSerialNumbers).Первичный ключ таблицы LicenseSerialNumbers - это внешний ключ столбца licenseID в таблице активаций (LicenseSerialNumbers.ID == Activations.licenseID)
Теперь я отфильтровал результат таблицы активаций, чтобы получить только ключи, активированные для серийного номера продукта.из-за требований бизнеса.У меня есть этот результат в список 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, представляет собой список.Но функция SqlQuery принимает только примитивные переменные.
Как я могу перебрать значения id и сделать данные переменных списком?Я пробовал цикл foreach и for для перебора списка идентификаторов, но не смог получить вывод из области цикла.
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'
Как выполнить итерацию и получить каждый сравниваемый результат, добавленный в список?