选择 ID 字段的 AsQueryable linq 语句

Posted

技术标签:

【中文标题】选择 ID 字段的 AsQueryable linq 语句【英文标题】:AsQueryable linq statement with selecting the ID field 【发布时间】:2016-05-16 17:41:20 【问题描述】:

给定一个简单的模型:

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,它将按预期返回所有内容,除了 Id 将为空。

我们想使用 select 来限制返回的数据量。我们可以使用动态对象(或创建一个新对象来传递),但似乎是多余的。

对这个问题有什么建议吗?

【问题讨论】:

【参考方案1】:

票在这里:https://jira.mongodb.org/browse/CSHARP-1555。

我唯一的问题是你为什么要创建一个新模型? x 已经是正确的类型。

【讨论】:

这只是我发现的问题的一个例子

以上是关于选择 ID 字段的 AsQueryable linq 语句的主要内容,如果未能解决你的问题,请参考以下文章

AsQueryable() 的目的是啥?

linq中AsEnumerable和AsQueryable的区别

linq中AsEnumerable和AsQueryable的区别

为啥类 DBSet 的 AsQueryable() 不在 MSDN 文档中?

存储库中的异步 AsQueryable [重复]

C# groupby 使用 AsQueryable 报错