LINQ帮助初学者选择多个表格

本文关键字:表格 选择 帮助 初学者 LINQ | 更新日期: 2023-09-27 18:00:37

我有下面的存储库,其中包括三种返回数据库对象的方法,前两个查询可以很好地工作,因为它们只返回一个数据列表,但是由于第三个方法需要从两个表中进行选择,我有点困惑如何做到这一点。

有人能告诉我正确的方向吗?如何编写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.Collections.Generic;使用System.Linq;使用System.Text;使用CustomerDatabase.Domain.Entities;

命名空间CustomerDatabase.Domain.Abstract{接口ICustomersAndSitesM{IQueryable客户{get;}IQueryable CustomerSites{get;}}

}

LINQ帮助初学者选择多个表格

如果您的两个表实际上用外键正确链接,那么当您拉入父记录时,LINQ也会拉入子记录。您需要检查DataContext在调试时返回的模型,并且您应该能够通过足够的挖掘来查看任何链接的记录。例如,如果您有链接到客户的站点,在客户域模型结果中,您应该看到一个名为"站点"的字段,该字段是链接到该客户的站点域模型的列表。

我想您实际上想要得到一个"CustomersAndSitesMix",而不是返回一个"ICustomersAndSitesPositionory"。如果是这样,你可以这样做:

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);
    }
}