AsQueryable оператор linq с выбором поля идентификатора

Учитывая простую модель:

public class Model{
    private string _id;
    [BsonId(IdGenerator = typeof(StringObjectIdGenerator))]
    [BsonRepresentation(BsonType.ObjectId)]
    public string Id {
        get { return _id; }
        set { _id = value; }
    }
    //Additional fields
}

Предположим, я хочу выбрать только несколько полей из этого класса на основе запроса:

_collection.AsQueryable<Model>().Where(m => m.Id == id)
    .Select( x => 
        new Model(){
            Id = x.Id,
            SomeField = x.SomeField
        });

Произойдет следующая ошибка: Элемент 'Id' не соответствует ни одному полю или свойству класса Model.

Если предложение select отсутствует, идентификатор устанавливается и возвращается, как ожидается. Кроме того, если вы удалите поле Id из выбора, оно вернет все, как ожидалось, за исключением того, что Id будет нулевым.

Мы хотим использовать выбор, чтобы ограничить количество возвращаемых данных. Мы могли бы использовать динамический объект (или создать новый объект для передачи), но он кажется избыточным.

Есть предложения по этому вопросу?

1 ответ

Билет здесь: https://jira.mongodb.org/browse/CSHARP-1555.

Единственный вопрос, который у меня есть, - почему вы создаете новую модель? х уже имеет правильный тип.

Другие вопросы по тегам