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;
}

此时,我可以得到我想要的查询结果。我只需要一个或null,所以我设置了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;
}

你能给我一个关于第一个和第二个函数的返回类型的建议吗?我搜索并尝试(列表、数组等),但找不到一个很好的解决方案

编辑:

根据建议,我编辑了代码,如下所示。现在,我可以使用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.IQUERAY<HelloWorld.Controllers.HelloController.IncSite>'到"HelloWorld.Controllers.HelloController.IncSite"。显式转换存在(你错过了一个演员阵容吗?)

我想这是因为我没有放FirstOrDefault(),因为我希望这个查询能找到多条记录。如何完成此功能以获得多个结果?

您可以通过两种方式来实现这一点,或者通过创建一个新类来实现。让它成为一些Address,将这些选定的值作为字段,在这种情况下,返回类型将与Address相关(如果使用FirstOrDefault,则为Address,如果使用.ToList(),则为List,依此类推)或者您可以将返回类型指定为dynamic,在这种情况下不需要其他更改。但我建议您尽可能创建一个类,并避免在这种情况下使用dynamic,因为

它要慢得多,并且不会进行相同的编译时错误检查作为一个适当的

根据David的评论进行更新

情况1:

//definition should be something like this
public class Address
{
public string IncID { get; set; }
public string Number { get; set; }
public string Direction { get; set; }
public string StreetName { get; set; }
public string Zip { get; set; }
public string City { get; set; }
public string State { get; set; }
}

方法应该是这样的:

private Address GetAddressByIncID(int? incID)
{
var incAddress = (from address in db.Incs
where address.IncID == incID
select new Address
{
IncID = address.IncID,
Number = address.Number,
Direction = address.Direction,
StreetName = address.StreetName,
Zip = address.Zip,
City = city.CityDesc,
State = state.StateDesc
}).FirstOrDefault();
return incAddress;
}

情况2

private dynamic GetAddressByIncID(int? incID)
{
var incAddress = // Query here
return incAddress;
}

相关内容

最新更新