The key point to exclude PartitionKey and RowKey from result is to set ProjectSystemProperties of TableRequestOptions to false.
So the code above should be modified like this:
var emps = query.Execute(new TableRequestOptions { ProjectSystemProperties = false });
Another working example:
var query = new TableQuery<Event>()
.Where(
TableQuery.GenerateFilterCondition(
"PartitionKey", QueryComparisons.Equal, partitionKey))
.Select(new[] { "Id" });
var results = table.ExecuteQuery(query,
new TableRequestOptions { ProjectSystemProperties = false });
Then you will get response like this:
{"odata.etag":"W/\"datetime'2017-10-27T08%3A05%3A40.6551979Z'\"","Id":"Event-1" },
{"odata.etag":"W/\"datetime'2017-10-27T09%3A05%3A40.6551979Z'\"","Id":"Event-2" },
...
To avoid odata.etag in result, specify PayloadFormat in TableRequestOptions and get exactly what you want:
var results = table.ExecuteQuery(query,
new TableRequestOptions {
ProjectSystemProperties = false,
PayloadFormat = TablePayloadFormat.JsonNoMetadata
});
Result:
{ "Id":"Event-1" },{ "Id":"Event-2" },...