LINQ帮助初学者选择多个表

时间:2011-06-29 15:38:36

标签: c# linq asp.net-mvc-2 repository viewmodel

我有以下存储库,其中包含三个返回我的数据库对象的方法,前两个查询工作正常,因为它们简单地返回一个数据列表,但是因为四方法需要从两个表中选择,我有点混淆如何这样做。

任何人都可以指出我正确的方向,如何编写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; }     }

}

2 个答案:

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