c# - 匿名类型列表的声明

标签 c# linq

我不知道问题的格式是否正确,但我想做的是在 using 循环之外创建 varservations 但不这样做知道如何初始化它。

此代码有效:

using (MainContextDB db = new MainContextDB())
{
    var reservations = (from c in db.Reservations select new { c.CustAcctNo, c.ReservNo, c.ReservStatus }).ToList();
}

任何在循环外声明 var 的尝试都会触发错误:

Cannot convert List to List

我已经尝试过:

var reservations = new List<dynamic>();
var reservations = new List<object>();

此代码有效,但需要检索所有列,这不是我想要的:

List<Reservation> reservations = new List<Reservation>();
using (MainContextDB db = new MainContextDB())
{
    reservations = db.Reservations.ToList();
}

最佳答案

你可以这样做:

var reservations = new []
{
    new { CustAcctNo = "", ReservNo = "", ReservStatus = "" }
}.ToList();

using (MainContextDB db = new MainContextDB())
{
    reservations = (
        from c in db.Reservations
        select new
        {
            c.CustAcctNo, c.ReservNo, c.ReservStatus
        }).ToList();
}

您只需确保与匿名类成员的类型匹配即可。


另一个选项是添加对 Microsoft Reactive Framework 团队的“交互式扩展”的引用。他们有一个很好的 Using enmerables 方法,可以让你做到这一点:

var reservations = 
    EnumerableEx
        .Using(
            () => new MainContextDB(),
            db =>
                from c in db.Reservations
                select new
                {
                    c.CustAcctNo, c.ReservNo, c.ReservStatus
                })
        .ToList();

关于c# - 匿名类型列表的声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22391994/

相关文章:

linq - 关于 IQueryable<T>.GetEnumerator 的一些令人困惑的事情

c# try...catch 语句在异步操作发生异常时不捕获异常

c# - Linq to Object 的日期时间周期

c# - Unity C# 等待然后做

c# - 如何确定给定固定宽度字体和最大宽度(以像素为单位)的最大字符数

c# - Linq 连接两个值

linq - 以编程方式将 SQL 查询转换回 Linq 表达式

c# - ASP.NET MVC/C# - Linq 和散列密码

c# - 检测屏幕键盘是否打开(TabTip.exe)

c# - 将包含两个 foreach 循环的迭代器拆分为两个不同的函数