#c# #sql #linq
#c# #sql #linq
Вопрос:
Возможно ли выполнить один запрос для получения нескольких значений базы данных с помощью этого шаблона?
У меня есть один вызов модели представления: FreemimumViewModel. Внутри модели представления у меня есть:
public class FreemiumViewModel
{
public FreemiumViewModel()
{
Skus = new HashSet<StockKeepingUnit>();
Features = new HashSet<Feature>();
RowValues = new Dictionary<string, object>();
ColumnTitles = new List<string>();
CanUsePromoCode = true;
SelectionMatrix = new HashSet<FeatureStockKeepingUnitViewModel>();
}
public ICollection<Feature> Features { get; set; }
public ICollection<StockKeepingUnit> Skus { get; set; }
public ICollection<FeatureStockKeepingUnitViewModel> SelectionMatrix { get; set; }
public UserProfile UserProfile { get; set; }
public UserSubscriptionViewModel UserSubscriptionViewModel { get; set; }
public bool CanUsePromoCode { get; set; }
public string PromotionalCode { get; set; }
/// <summary>
/// StockKeepingUnit name
/// </summary>
public List<string> ColumnTitles { get; set; }
/// <summary>
/// Key is the feature row title and object is the stock column value.
/// </summary>
public Dictionary<string, object> RowValues { get; set; }
}
Теперь я хочу собрать всю информацию о базе данных с этим синтаксисом :
var vModel = (from skus in Context.Instance.StockKeepingUnits
from features in Context.Instance.Features
...
select new FreemiumViewModel()
{
Skus = skus, // Need to be ICollection
Features = features // Need to be ICollection
...
}).SingleOrDefault();
Я пытаюсь выполнить один запрос к базе данных вместо нескольких, но у меня нет своих коллекций sku и функций. Можете ли вы мне помочь?
Комментарии:
1. Для коллекций в вашей viewmodel похоже, что вы пытаетесь полностью загрузить каждую из коллекций из базы данных без применения каких-либо фильтров. Это то, что вы пытаетесь сделать?
2. Да, это то, что мне нужно.
Ответ №1:
Учитывая, что вы пытаетесь выделить всю каждую коллекцию целиком в свою viewmodel, вам не нужно выражение linq. Вы можете просто создать viewmodel напрямую, т.е.:
var viewmodel = new FreemiumViewModel
{
Skus = Context.Instance.StockKeepingUnits.ToList(),
Features = Context.Instance.Features.ToList()
...
};