Я пытаюсь получить результат запроса LINQ и передать его в другую функцию, чтобы использовать его.Тип возврата LINQ и использование в другой функции
Это моя первая функция, вызываемая из браузера. Затем вызывается GetAddressByIncID
.
// GET: Hello/5
public void GetModel(int? incID)
{
var incAddress = GetAddressByIncID(incID);
var siteID = GetSiteIDbyAddress(incAddress);
LoadSite(siteID);
}
private ?returntype? GetAddressByIncID(int? incID)
{
var incAddress = (from address in db.Incs
where address.IncID == incID
select new
{
IncID = address.IncID,
Number = address.Number,
Direction = address.Direction,
StreetName = address.StreetName,
Zip = address.Zip,
City = city.CityDesc,
State = state.StateDesc
}).FirstOrDefault();
return incAddress;
}
На данный момент я могу получить результат запроса, который я хотел. Мне нужен только один или нулевой, поэтому я установил FirstOrDefault()
. Внутри этой функции я могу получить доступ к значениям внутри incAddress, например incAddress.IncID, и я хочу сделать это в другой функции, когда он передается им. Поскольку его тип - Анонимный тип, я не уверен, какой тип возвращаемого значения я должен использовать.
Как только это возвращается, я передаю его другой функции, которая называется GetSiteIDbyAddress
, чтобы узнать SiteID
. Этот результат может быть кратным.
private ?returntype? GetSiteIDbyAddress(string incAddress)
{
var searchaddress = (from address in db.Addresses
where PrimaryAddressNumber == incAddress.Number && Direction == incAddress.Direction && StreetName == incAddress.StreetName
select new
{
SiteID = address.SiteID
});
return searchaddress;
}
Не могли бы вы дать мне предложение о возврате типа первой и второй функции? Я искал и пытался (список, массив и т. Д.), Но не смог найти отличное решение для него.
EDIT:
С предложениями, я редактировал мой код выглядит ниже. Теперь я могу использовать значения от IncAddress
, чтобы перейти к другой функции. Однако возникает другая проблема.
public class IncAddress
{
public int IncID { get; set; }
public string Number { get; set; }
.
.
}
public class IncSite
{
public int? SiteID { get; set; }
.
.
}
private IncAddress GetAddressByIncID(int incID)
{
var incAddress = (from address in db.Incs
where address.IncID == incID
select new IncAddress
{
IncID = address.IncID,
Number = address.Number,
Direction = address.Direction,
StreetName = address.StreetName,
Zip = address.Zip,
City = city.CityDesc,
State = state.StateDesc
}).FirstOrDefault();
return incAddress;
}
private IncSite GetSiteIDbyAddress(IncidentAddress incidentAddress)
{
var searchaddress = (from address in db.Addresses
where PrimaryAddressNumber == incAddress.Number
select new IncSite
{
SiteID = address.SiteID
});
return searchaddress;
}
На GetSiteIDbyAddress
, я получаю говорит об ошибке:
Не может неявно преобразовать тип 'System.Linq.IQueryable < HelloWorld.Controllers.HelloController.IncSite>' на « HelloWorld.Controllers. HelloController.IncSite. Явное преобразования существует (вы пропали без вести броска?)
Я думаю, это потому, что я не ставил FirstOrDefault()
, потому что я ожидал множественная запись будет найдена этим запросом. Как я могу выполнить эту функцию, чтобы получить несколько результатов?
Создать класс для хранения данных. В вашей инструкции LINQ используйте 'new myClass' вместо' new', и вы можете вернуть тип 'myClass'. – Tim
Возможный дубликат результатов [Вернуться к анонимному типу?] (Http://stackoverflow.com/questions/534690/return-anonymous-type-results) – BACON
Очевидно, что это не очень хорошая практика для прохождения анонимного типа. Поэтому, если вам нужно использовать результирующий набор вне запроса или метода/функции, вы должны сделать это как «не повезло», сказанное в его ответе, и создать класс. Лично не нравится использование 'var', мне нравится объявлять вещи тем, чем они являются. – Edward