Я пишу запрос в LINQ, но у вас проблемы с получением правильной записи из базы данных. Когда я выполняю запрос LINQ, я получаю дубликаты записей. Пожалуйста, смотрите ниже записей с результатами дублированных в формате JSON:Проблема с получением правильных результатов запроса LINQ с LEFT JOIN
[
{
"serverId": 1,
"applicationName": "TestApp",
"resourceName": "Test AppFabric",
"serverName": "Server1",
"aliasName": null,
"os": "Windows Server 2008",
"ipAddress": "192.168.1.1",
"vip": "10.1.1.5",
"url": "www.testapp.com",
"domain": "Domain1",
"network": "Internal Harden",
"typeName": "Application",
"environmentName": "DEV",
"status": "Active"
},
{
"serverId": 1,
"applicationName": "TestApp",
"resourceName": "Test AppFabric",
"serverName": "Server1",
"aliasName": null,
"os": "Windows Server 2008",
"ipAddress": "192.168.1.1",
"vip": "",
"url": "",
"domain": "Domain1",
"network": "Internal Harden",
"typeName": "Application",
"environmentName": "DEV",
"status": "Active"
},
{
"serverId": 2,
"applicationName": "TestApp",
"resourceName": "Test AppFabric",
"serverName": "Server2",
"aliasName": null,
"os": "Windows Server 2008",
"ipAddress": "192.168.1.2",
"vip": "10.1.1.5",
"url": "www.testapp.com",
"domain": "Domain1",
"network": "Internal Harden",
"typeName": "Application",
"environmentName": "DEV",
"status": "Active"
},
{
"serverId": 2,
"applicationName": "TestApp",
"resourceName": "Test AppFabric",
"serverName": "Server2",
"aliasName": null,
"os": "Windows Server 2008",
"ipAddress": "192.168.1.2",
"vip": "",
"url": "",
"domain": "Domain1",
"network": "Internal Harden",
"typeName": "Application",
"environmentName": "DEV",
"status": "Active"
},
{
"serverId": 3,
"applicationName": "TestApp",
"resourceName": "Test AppFabric UI",
"serverName": "Server3",
"aliasName": null,
"os": "Windows Server 2008",
"ipAddress": "172.16.1.1",
"vip": "",
"url": "",
"domain": "Domain2",
"network": "DMZ 1",
"typeName": "Application",
"environmentName": "DEV",
"status": "Active"
},
{
"serverId": 3,
"applicationName": "TestApp",
"resourceName": "Test AppFabric UI",
"serverName": "Server3",
"aliasName": null,
"os": "Windows Server 2008",
"ipAddress": "172.16.1.1",
"vip": "10.1.1.6",
"url": "www.testappui.com",
"domain": "Domain2",
"network": "DMZ 1",
"typeName": "Application",
"environmentName": "DEV",
"status": "Active"
},
{
"serverId": 4,
"applicationName": "TestApp",
"resourceName": "Test AppFabric UI",
"serverName": "Server4",
"aliasName": null,
"os": "Windows Server 2008",
"ipAddress": "172.16.1.2",
"vip": "",
"url": "",
"domain": "Domain2",
"network": "DMZ 1",
"typeName": "Application",
"environmentName": "DEV",
"status": "Active"
},
{
"serverId": 4,
"applicationName": "TestApp",
"resourceName": "Test AppFabric UI",
"serverName": "Server4",
"aliasName": null,
"os": "Windows Server 2008",
"ipAddress": "172.16.1.2",
"vip": "10.1.1.6",
"url": "www.testappui.com",
"domain": "Domain2",
"network": "DMZ 1",
"typeName": "Application",
"environmentName": "DEV",
"status": "Active"
},
{
"serverId": 1002,
"applicationName": "TestApp",
"resourceName": "Test AppFabric",
"serverName": "Server5",
"aliasName": null,
"os": "Windows Server 2008",
"ipAddress": "10.1.1.5",
"vip": "",
"url": "",
"domain": "Domain1",
"network": "Internal Harden",
"typeName": "Application",
"environmentName": "INT",
"status": "Active"
},
{
"serverId": 1003,
"applicationName": "TestApp",
"resourceName": "Test AppFabric",
"serverName": "server6",
"aliasName": null,
"os": "Windows Server 2008",
"ipAddress": "10.1.1.6",
"vip": "",
"url": "",
"domain": "Domain1",
"network": "Internal Harden",
"typeName": "Application",
"environmentName": "INT",
"status": "Active"
}
]
Вот запрос я использую в моем приложении ASPT.NET Core:
var query = from rg in _context.ResourceGroup
join sr in _context.ServersResourceGroup on rg.Id equals sr.ResourceGroup_id
join rge in _context.ResourceGroupEnvironment on sr.Environment_id equals rge.Environment_id into lrges
from lrge in lrges.Where(r => r.ResourceGroup_id == sr.ResourceGroup_id).DefaultIfEmpty()
join s in _context.Servers on sr.Server_id equals s.Id
join e in _context.Environments on sr.Environment_id equals e.Id
join a in _context.Applications on rg.Application_Id equals a.Id
join d in _context.Domains on s.Domain_Id equals d.Id
join t in _context.Types on rg.Type_Id equals t.Id
join o in _context.OperatingSystems on s.OperatingSystem_Id equals o.Id
join n in _context.NetworkZones on s.NetworkZone_Id equals n.Id
join stat in _context.Status on s.Status.Id equals stat.Id
where a.Name.ToLower() == applicationName.ToLower()
select new SearchListViewModel()
{
serverId = s.Id,
serverName = s.ServerName,
aliasName = s.Alias,
domain = d.Name,
environmentName = e.Name,
network = n.Name,
os = o.OSVersion,
ipAddress = s.IPAddress,
vip = lrge == null ? string.Empty : lrge.VIP,
url = lrge == null ? string.Empty : lrge.EndPointURL,
typeName = t.Name,
applicationName = a.Name,
resourceName = rg.Name,
status = stat.Name
};
return query.ToList();
Кроме того, здесь является родным SQL запрос, который только работает отлично.
SELECT s.ServerName, rg.Name as ResourceGroup, e.Name as Env,
rge.EndPointURL, rge.VIP
FROM ResourceGroup as rg
JOIN ServersResourceGroup as srg on rg.Id = srg.ResourceGroup_id
JOIN Servers as s on srg.Server_id = s.Id
JOIN Environments as e on srg.Environment_id = e.Id
LEFT JOIN ResourceGroupEnvironment as rge on srg.Environment_id = rge.Environment_id and rg.Id = rge.ResourceGroup_Id
Не уверен, что если мой LINQ запрос неправильно, но я пытаюсь выполнить над родной запрос в LINQ,
Вот моя модель сущность, чтобы помочь понять требование:
Любая помощь действительно оценена.
Спасибо,
Ray
Он работал. Я искал несколько дней, чтобы узнать, как использовать несколько условий, и теперь это имеет смысл. Большое спасибо. :) – Ray