从 SQL 表中,我试图获取每个项目的最后一行。我分配了一个用户列表(objectIds 列表)并希望获得他们每个人的最后一份工作。这是下面的功能。
public async Task<List<Job>> GetLastJobs(List<int> objectIds)
{
using ManagerContext context = new ManagerContext(_callContext);
List<Job> jobs = context.Jobs.Where(j => j.ObjectId.HasValue && objectIds.Contains(j.ObjectId.Value)).GroupBy(j => j.ObjectId).Select(j => j.OrderByDescending(p => p.Id).FirstOrDefault()).ToList();
return null;
}
Run Code Online (Sandbox Code Playgroud)
在执行时,它返回:
the LINQ expression '(GroupByShaperExpression:
KeySelector: (j.ObjectId),
ElementSelector:(EntityShaperExpression:
EntityType: Job
ValueBufferExpression:
(ProjectionBindingExpression: EmptyProjectionMember)
IsNullable: False
)
)
.OrderByDescending(p => p.Id)' could not be translated.
Run Code Online (Sandbox Code Playgroud)
以可翻译的形式重写查询,或通过插入对 AsEnumerable()、AsAsyncEnumerable()、ToList() 或 ToListAsync() 的调用显式切换到客户端评估。有关 详细信息,请参阅https://go.microsoft.com/fwlink/?linkid=2101038。
我不知道如何,从哪里开始解决问题
在C#代码中,我将字符串(示例PRmlyc3RuYW1lOj1FbW1hbnVlbMKkJMKkTGFzdE5hbWU6PURyZXV4wqQkwqRNYWlsYm94VHlwZTo9TWJ4)转换为字节数组,然后从powershell脚本将字节数组转换回字符串.这会在字符串的开头和结尾产生垃圾:
☺?????☺♠☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺
C#代码:
byte[] array = ToByteArray(encodedParameters);
private byte[] ToByteArray(object source)
{
var formatter = new BinaryFormatter();
using (var stream = new MemoryStream())
{
formatter.Serialize(stream, source);
return stream.ToArray();
}
}
Run Code Online (Sandbox Code Playgroud)
Powershell解码:
$cmd = [System.Text.Encoding]::ASCII.GetString($buf, 0, $len)
Run Code Online (Sandbox Code Playgroud)
要么
$cmd = [System.Text.Encoding]::UTF8.GetString($buf, 0, $len)
Run Code Online (Sandbox Code Playgroud)
要么
$cmd = [System.Text.Encoding]::UNICODE.GetString($buf, 0, $len)
Run Code Online (Sandbox Code Playgroud)
如果我在C#和powershell中转储字节数组,我得到相同的缓冲区:
0 1 0 0 0 255 255 255 255 1 0 0 0 0 0 0 0 6 1 0 0 0 80 82 109 108 121 99 …