我有以下存储库,其中包含三个返回我的数据库对象的方法,前两个查询工作正常,因为它们简单地返回一个数据列表,但是因为四方法需要从两个表中选择,我有点混淆如何这样做。
任何人都可以指出我正确的方向,如何编写LINQ查询以从两个相关表中进行选择,以传递到下面显示的存储库中的最后一个方法(CustomerAndSites) - 这些表与客户ID字段相关,
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using CustomerDatabase.Domain.Abstract;
using CustomerDatabase.Domain.Concrete;
using CustomerDatabase.Domain.Entities;
using System.Data.Linq.Mapping;
using System.Data.Linq;
using System.Web.Mvc;
namespace CustomerDatabase.Domain.Concrete
{
class SqlCustomersAndSitesRepository : ICustomersAndSitesRepository
{
public Table<CustomerSite> customerSitesTable;
public Table<Customer> customerTable;
public SqlCustomersAndSitesRepository(string connectionString)
{
customerSitesTable = (new DataContext(connectionString)).GetTable<CustomerSite>();
customerTable = (new DataContext(connectionString)).GetTable<Customer>();
}
public IQueryable<CustomerSite> CustomerSites
{
get { return customerSitesTable; }
}
public IQueryable<Customer> Customers
{
get { return customerTable; }
}
public IQueryable <ICustomersAndSitesRepository> CustomerAndSites
{
get { return CustomerAndSites; }
}
}
}
====更新
这是我的ICustomersAndSitesM界面,我在哪里定义CustomersAndSitesMix,我是否需要创建它作为一个单独的实体?我的UI项目中有一个包含两个对象属性的视图模型。
使用System; 使用System.Collections.Generic; 使用System.Linq; 使用System.Text; 使用CustomerDatabase.Domain.Entities;
命名空间CustomerDatabase.Domain.Abstract { 界面ICustomersAndSitesM { IQueryable Customers {get; } IQueryable CustomerSites {get; } }
}
答案 0 :(得分:0)
如果您的两个表实际上与外键正确链接,LINQ将在您提取父记录时引入子记录。您需要检查DataContext在调试时返回的模型,并且您应该能够看到任何具有足够挖掘的链接记录。例如,如果您将站点链接到客户,则在您的客户域模型结果中,您应该看到一个名为“站点”的字段,该字段是链接到客户的站点域模型列表。
答案 1 :(得分:0)
我猜你实际上想要获得'CustomersAndSitesMix',而不是返回'ICustomersAndSitesRepository'。如果是这样,你可以这样做:
public IQueryable<ICustomersAndSitesM> CustomerAndSites
{
get
{
return from customer in customerTable
join site in customerSitesTable
on customer.PLACEKEYHERE equals site.PLACEKEYHERE
select new CustomersAndSitesMix(customer, site);
}
}