我有一个方法可以从postgres中的序列返回值:
public long GetSId(DatabaseFacade d, string sequenceName)
{
var result = new NpgsqlParameter(":result", NpgsqlDbType.Integer)
{
Direction = System.Data.ParameterDirection.InputOutput,
Value = 0
};
d.ExecuteSqlRaw($"SELECT nextval('{sequenceName}')", result);
return (long)result.Value;
}
我有一种形成数据的方法:
private List<CrossingsResult> FormCrossingResult()
{
var d = _dbContext.Database;
var crosswalks = _dbContext.Crosswalks
.Select(x => new CrossingsResult
{
SId = GetSId(d, _sequenceName),
...
}).ToList();
return crosswalks;
问题是,当我在Select中调用方法时,SID不会改变(例如,它会为所有记录设置相同的SID值).但如果我在人行横道外调用该方法,它会起作用 就像这样:
private List<CrossingsResult> FormCrossingResult()
{
var d = _dbContext.Database;
Console.WriteLine($"First call: {GetSId(d, _sequenceName)}");
Console.WriteLine($"Second call: {GetSId(d, _sequenceName)}");
Console.WriteLine($"Third call: {GetSId(d, _sequenceName)}");
var crosswalks = _dbContext.Crosswalks
.Select(x => new CrossingsResult
{
SId = GetSId(d, _sequenceName),
...
}).ToList();
foreach (var crosswalk in crosswalks)
{
Console.WriteLine(crosswalk.SId);
}
return crosswalks;
Result be like this:
我试着用for循环来做它,它起作用了:
private List<CrossingsResult> FormCrossingResult()
{
var d = _dbContext.Database;
var crosswalks = _dbContext.Crosswalks
.Select(x => new CrossingsResult
{
...
}).ToList();
foreach (var crosswalk in crosswalks)
{
crosswalk.SId = GetSId(d, _sequenceName);
}
return crosswalks;
但我希望调用Inside Select的方法不使用for循环