以下代码按预期工作,与asp站点上的示例非常相似:
public abstract class BaseResourceTests : IDisposable
{
private readonly TestServer _server;
public HttpClient HttpClient { get; }
protected BaseResourceTests(string resourceVersion)
{
var hostBulider = new WebHostBuilder()
.UseStartup<Startup>();
_server = new TestServer(hostBulider);
HttpClient = _server.CreateClient();
HttpClient.BaseAddress = new Uri("http://localhost:5000");
}
public virtual void Dispose()
{
HttpClient.Dispose();
_server.Dispose();
}
}
public class EndpointTests : BaseResourceTests
{
public EndpointTests()
: base(Resource.VersionHeader)
{
}
[Fact]
public async Task Post_BodyHasValidDto_ReturnsCreated()
{
var dto = new Dto { Name = "someDto" };
var response = …Run Code Online (Sandbox Code Playgroud) 您好StackOverflow用户,
我遇到了这个问题,我有三个QueryOvers,每个QueryOvers返回一个候选ID列表,然后我用它来带来这些候选者.为此,我写了以下代码.
private IQueryOver<CandidateEntity, CandidateEntity> UnionPublicWithPrivateCandidates(
IQueryOver<CandidateEntity, CandidateEntity> publicCandidates,
IQueryOver<CandidateEntity, CandidateEntity> privateCandidate,
IQueryOver<CandidateEntity, CandidateEntity> candidatesByUserRole)
{
return ActiveCandidatesQueryOver.Where(Restrictions.Disjunction()
.Add(Subqueries
.WhereProperty<CandidateEntity>(c => c.Id)
.In((QueryOver<CandidateEntity>)publicCandidates.Select(c => c.Id)))
.Add(Subqueries
.WhereProperty<CandidateEntity>(c => c.Id)
.In((QueryOver<CandidateEntity>)privateCandidate.Select(c => c.Id)))
.Add(Subqueries
.WhereProperty<CandidateEntity>(c => c.Id)
.In((QueryOver<CandidateEntity>)candidatesByUserRole.Select(c => c.Id))));
}
Run Code Online (Sandbox Code Playgroud)
这将返回正确的结果,生成的查询如下所示
SELECT *
FROM Applicants
WHERE IsActive = 1
and (Id in (SELECT Id from **FirstQueryOver**)
**or** Id in (SELECT Id from **SecondQueryOver**)
**or** Id in (SELECT Id from **ThirdQueryOver**))
Run Code Online (Sandbox Code Playgroud)
问题是它使用'或'.因此,查询非常缓慢.
如果相反我写这个:
SELECT *
FROM Applicants
WHERE IsActive = 1 …Run Code Online (Sandbox Code Playgroud)