Linq to SQL выберите новый шаблон

#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()
        ...
   };