我有下面的存储库,其中包括三个用于返回我的db对象的方法,前两个查询工作得很好,因为它们简单地返回一个数据列表,然而,由于thrird方法需要从两个表中进行选择,所以我有点困惑于如何做到这一点。
谁能给我指出正确的方向,如何写一个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; }
}
}
}
====Update
这是我的ICustomersAndSitesM接口,我在哪里定义CustomersAndSitesMix,我需要将它创建为一个独立的实体吗?我的UI项目中有一个视图模型,其中包含两个对象的属性。
使用系统;使用System.Collections.Generic;使用System.Linq;使用System.Text;使用CustomerDatabase.Domain.Entities;
命名空间接口{ CustomerDatabase.Domain.Abstract ICustomersAndSitesM { IQueryable Customers { get;} IQueryable CustomerSites { get;}}
}
发布于 2011-06-29 15:54:59
如果您的两个表实际上是通过外键正确链接的,那么当您拉入父记录时,LINQ也会拉入子记录。您需要在调试时检查DataContext返回的模型,并且应该能够在充分挖掘的情况下看到任何链接的记录。例如,如果您有链接到客户的站点,则在客户域模型结果中,您应该看到一个名为" Sites“的字段,它是链接到客户的站点域模型的列表。
发布于 2011-06-29 16:06:03
与其返回'ICustomersAndSitesRepository',我猜你实际上想要一个'CustomersAndSitesMix‘。如果是这样,您可以这样做:
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);
}
}
https://stackoverflow.com/questions/6523337
复制