c# - 无法将手动匿名项目添加到 IQueryable

标签 c# linq iqueryable

从我有这个 linq 查询来从 IQueryable 构建一个 json(字符串和 bool ?):

var ret = from c in results select new { country = c.EN, schengen = c.Schengen };

我想手动添加新项目:(伪代码)

ret = ret /* add this -> */ { country = "some new country", schengen = true }

我试过这样做:

//End up with cannot convert from AnonymousType#2 to AnonymousType#1
var listRet = ret.ToList();
listRet.Add(new { country ="", schengen = true });

因为它是我构建的匿名类型,所以我找不到添加它的方法。我总是以转换错误结束

最佳答案

匿名类型仍然是静态类型的,C# 编译器为每个匿名类型定义事件生成一个单独的类。在这种情况下,您需要一个命名类。无论如何,这对于数据传输对象来说是一个很好的做法。我像这样使用 JSON DTO,使用数据注释和 DataContractJsonSerializer。

[DataContract]
public class CountryInfo
{
    [DataMember(Name = "country")]
    public string Country { get; set; }

    [DataMember(Name = "schengen", EmitDefaultValue = false)
    public bool? Schengen { get; set; }
}

这样我就有了一个记录良好的 JSON“协议(protocol)”,它在序列化之前也使用 C# 命名约定,但在序列化之后使用 JS 命名约定。

关于c# - 无法将手动匿名项目添加到 IQueryable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13398526/

相关文章:

c# - 单例查找表需要锁吗?

c# - 如何使用Where条件和调用方法来优化这个LINQ表达式?

c# - 无法将类型 System.Linq.IQueryable<string> 隐式转换为字符串

linq to sql ExecuteQuery() as IQueryable

c# - 一张表、多个 View 、一个 C# 类

c# - 为什么 INotifyPropertyChanged 在 Model 和 ViewModel 中都有?

C# 获取访问属性

c# - C# 中是否有类似 VB.NET 的运算符?

entity-framework - EF 核心 Iqueryable<T>。 Count() 返回的数字不同于 Iqueryable<TO> .ToList().Count()。这甚至可能还是一个错误?

c# - 你如何用 Rhino Mocks stub IQueryable<T>.Where(Func<T, bool>)?