У меня проблема с тем, как вернуть список организаций в зависимости от его типа.Позвольте мне описать схему:
Поиск таблицы для типов организации
TypeOfOrganization (table)
-- Id (Guid)[PK]
-- Type (varchar)
Пример данных
Id Type
------------------------------------ --------------------
0C54DECC-6A7B-463F-A160-20F3F270473E Company Location
B07BE7A9-E569-43F7-B6D9-8A9B19F6D35C Mail Center
BEA6E923-2170-40B0-9F54-8B6458DB75FD Client
EBC8C254-FE87-4241-BA37-AD0B1FF5C370 Counsel
F5EEEF8D-454D-430E-815E-CDFF942D28A0 Company
5FDC2CD5-A0E9-4656-96C1-F365E67A1E42 Bank
B4D25CD7-D695-4A6D-9E81-FDD673BDD2A3 Vendor
Присоединение таблицы для Orginization к OrganizationTypes
OrganizationType (table)
-- Id (Guid)[PK]
-- OrganizationId (Guid)
-- TypeOfOrganizationId (Guid)
Пример данных
Id OrganizationId TypeOfOrganizationId
------------------------------------ ------------------------------------ ------------------------------------
FECEC824-C5F4-41F8-9F5D-3236371A51B0 448FED23-393C-4019-87AE-0ED64764DFB1 F5EEEF8D-454D-430E-815E-CDFF942D28A0 (Company)
CEA03A1B-9E5F-49A5-BE04-9871A41986CF BEAAA39B-71BD-4F12-A570-FD71FEFD8503 F5EEEF8D-454D-430E-815E-CDFF942D28A0 (Company)
00998ACA-22D2-49D3-B2A2-CE2F3231B38A 1F87F1C5-44B9-4C60-9C38-001975229193 BEA6E923-2170-40B0-9F54-8B6458DB75FD (Client)
50CABBD2-CD55-4781-8BF3-83715216BF1A 6C8DC3B8-5A65-446E-A02B-02354FEDB3E3 BEA6E923-2170-40B0-9F54-8B6458DB75FD (Client)
5E60C5BF-4A36-4546-A3A9-818A1BC6E31B A315020C-268B-4F22-866C-034ACFC22A53 BEA6E923-2170-40B0-9F54-8B6458DB75FD (Client)
56629DFC-A78E-4092-8390-2ABFB21E6CB8 1BF7DAB9-7126-4DC8-A089-0169A52E9FF3 B4D25CD7-D695-4A6D-9E81-FDD673BDD2A3 (Vendor)
280AAE16-1732-44F7-8B8B-0357C5DAD2C4 7FC1BF63-6069-471D-85FC-09F4F5068DD2 B4D25CD7-D695-4A6D-9E81-FDD673BDD2A3 (Vendor)
... and more
К вашему сведению, в этой таблице не существует последнего столбца с именами типов организации, я просто поместил их там для лучшей визуализации структуры.
Таблица организации
Organization (table)
-- Id (Guid) [PK]
-- Name (varchar)
Пример данных
Id Organization
------------------------------------ ---------------
1F87F1C5-44B9-4C60-9C38-001975229193 Client A
6C8DC3B8-5A65-446E-A02B-02354FEDB3E3 Client B
A315020C-268B-4F22-866C-034ACFC22A53 Client C
448FED23-393C-4019-87AE-0ED64764DFB1 Company A
BEAAA39B-71BD-4F12-A570-FD71FEFD8503 Company B
1BF7DAB9-7126-4DC8-A089-0169A52E9FF3 Vendor A
7FC1BF63-6069-471D-85FC-09F4F5068DD2 Vendor B
00674C8A-34B9-46EF-B591-0C5EFBA4EB2B Vendor C
... and more
Мой вопрос: каков наилучший способ запроса организации определенного типа без использования класса Constants?
Пример:
- Я хочу получить список всех организаций, являющихся клиентами.
- Я хочу получить список всех организаций, являющихся поставщиками.
- Я хочу получить список всех организаций, которые являются компаниями.
В настоящее время мой запрос Linq в моем проекте ASP.NET WebApi для получения списка поставщиков выглядит следующим образом:
var vendors = context.Organizations
.Where(v => v.OrganizationTypes
.Any(t => t.TypeOfOrganizationId == Constants.TypeOfOrganization_Vendor);
Это класс констант:
public static class Constants
{
//TypeOfOrganization lookup table
public static Guid TypeOfOrganization_Client = Guid.Parse("BEA6E923-2170-40B0-9F54-8B6458DB75FD");
public static Guid TypeOfOrganization_Company = Guid.Parse("F5EEEF8D-454D-430E-815E-CDFF942D28A0");
public static Guid TypeOfOrganization_Bank = Guid.Parse("5fdc2cd5-a0e9-4656-96c1-f365e67a1e42");
public static Guid TypeOfOrganization_Location = Guid.Parse("0c54decc-6a7b-463f-a160-20f3f270473e");
public static Guid TypeOfOrganization_Counsel = Guid.Parse("ebc8c254-fe87-4241-ba37-ad0b1ff5c370");
public static Guid TypeOfOrganization_Vendor = Guid.Parse("b4d25cd7-d695-4a6d-9e81-fdd673bdd2a3");
}
Я понимаю, что это не лучший способ справиться с этим, но в настоящее время я не могу найти надежный способ сделать это.