我试图将列表返回到包含来自两个表的数据的显示模板,我正在使用存储库模式,以及一个viewmodel,用于将数据从返回两个对象的LINQ查询传递给视图
是否在界面中定义了多个类型的集合? 对于我在界面中使用过的单一类型,
IQueryable<CustomerSite> CustomerSites { get; }
然后我在存储库中有我的linq查询
public IQueryable<CustomerSite> CustomerSites
{
get { return customerSitesTable; }
}
但是,由于此新查询将包含两种类型(客户和客户站点),如何在界面中定义此集合?
== UPDATE
我尝试过使用.Include(这会抛出一条错误,指出Customer实体中没有include的定义,不确定我是否缺少名称空间?)
我也尝试过创建自定义界面
public interface ICustomersAndSitesRepository
{
IQueryable<CustomerSite> CustomerSites { get; }
IQueryable<Customer> Customers { get; }
IQueryable<ICustomersAndSitesRepository> CustomerAndSites { get; }
}
存储库中的此方法
public IQueryable <ICustomersAndSitesRepository> CustomerAndSites
{
get { return CustomerAndSites; }
}
然而,当我尝试将集合传递给控制器中的视图时,
public ViewResult List([DefaultValue(1)] int page)
{
var customersWithSitesToShow = customersAndSitesRepository.CustomerAndSites;
var viewModel = new CustomerSitesListViewModel
{
Customers = customersWithSitesToShow.Skip((page - 1) * PageSize).Take(PageSize).ToList(),
PagingInfo = new PagingInfo
{
CurrentPage = page,
ItemsPerPage = PageSize,
TotalItems = customersWithSitesToShow.Count()
}
};
return View(viewModel); //Passed to view as ViewData.Model (or simply model)
}
我收到了一个转换错误,重新将视图转换为视图模型
Cannot implicitly convert type 'System.Collections.Generic.List<CustomerDatabase.Domain.Abstract.ICustomersAndSitesRepository>' to 'System.Collections.Generic.IEnumerable<CustomerDatabase.WebUI.Models.CustomerViewModel>'. An explicit conversion exists (are you missing a cast?)
我定义了像
这样的viewmodelpublic IEnumerable Customers {get;组; }
有人可以指出我正确的方向吗?
答案 0 :(得分:0)
如何返回一个IQueryable自定义界面,其中包含您需要的每个集合的属性?
public interface ICustomersAndSites
{
IQueryable<CustomerSite> CustomerSites{get;}
IQueryable<Customers> Customers{get;}
}
然后您可以在存储库中设置它:
public IQueryable<ICustomersAndSites> CustomerAndSites
{
get { return combinationObject; }
}
答案 1 :(得分:0)
假设Customer
有多个CustomerSite
,那么您将返回IQueryable<Customer>
,但使用.Include
返回CustomerSites
Customer
}。
e.g。
public IQueryable<Customer> GetCustomersAndSites()
{
return MyEntities.Customers.Include("CustomerSite");
}