LINQ справка для начинающих, выбирающих несколько таблиц - PullRequest
3 голосов
/ 29 июня 2011

У меня есть следующий репозиторий, который включает в себя три метода для возврата моих объектов базы данных, первые два запроса работают нормально, так как они одновременно возвращают один список данных, однако, поскольку метод thrird требует выбора из обеих таблиц, я немного запутался с тем, какчтобы сделать это.

Может ли кто-нибудь указать мне правильное направление, как написать запрос LINQ для выбора из двух связанных таблиц, чтобы перейти к последнему методу (CustomerAndSites) в репозитории, показанном ниже - таблицысвязанный с полем идентификатора клиента,

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, нужно ли мнесоздать это как отдельную сущность?у меня есть модель представления в моем проекте пользовательского интерфейса, который содержит свойства для обоих объектов.

с использованием системы;using System.Collections.Generic;использование System.Linq;используя System.Text;использование CustomerDatabase.Domain.Entities;

пространство имен CustomerDatabase.Domain.Abstract {interface ICustomersAndSitesM {IQueryable Customers {get;} IQueryable CustomerSites {get;}}

}

Ответы [ 2 ]

0 голосов
/ 29 июня 2011

Вместо того, чтобы возвращать '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);
    }
}
0 голосов
/ 29 июня 2011

Если ваши две таблицы действительно правильно связаны внешним ключом, LINQ также извлечет дочерние записи, когда вы извлекаете родительские записи. Вам нужно изучить модель, которую ваш DataContext возвращает при отладке, и вы должны увидеть все связанные записи с достаточным количеством копаний. Например, если у вас есть сайты, связанные с клиентами, в результате в модели вашего домена клиента вы должны увидеть поле «Сайты», которое представляет собой список моделей доменов сайта, связанных с клиентом.

...