c# - 使用 LINQ Select New 时的转换问题

标签 c# linq

我有以下代码:

    private void EntryBrowserLoad(object sender, EventArgs e)
    {
        var ase = new AprilShowersEntities();

        var q =
            from d in ase.Entries
            orderby d.EntryEndTime
            select d;

        var dateQuery = from d in q.AsEnumerable()
                        select new
                        {
                            d.EntryEndTime,
                            d.EntryId,
                            d.EntryPlainText,
                            d.EntryStartTime,
                            d.EntryText,
                            EntryHeader = GetEntry(d.EntryEndTime, d.EntryPlainText)
                        };

        lcEntries.DisplayMember = "EntryHeader";
        lcEntries.DataSource = dateQuery;
    }

    private void BtnOkClick(object sender, EventArgs e)
    {
        var q = (Entry) lcEntries.SelectedItem.Value; // Error here on this line

        MessageBox.Show(q.EntryText);
    }

我的问题是在上面标记的行中出现错误,提示无法将对象转换回 Entry 对象。我敢肯定,原因是因为我在我的 LINQ 查询中使用了 select new。我的问题是,如何读取返回的 SelectedItem.Value 对象的 EntryText 属性?

最佳答案

您正在转换到匿名类型。要在具有编译时安全性和 Intellisense 等功能的其他地方(在包含方法的上下文之外)引用结果,您需要投影到具体类型中。如果您还没有这样的类,请定义一个描述您的元素的类

class TheEntry { /* define properties */ }

然后用你的查询选择进入类

select new TheEntry 

然后你可以转换到那个类

var entry = (TheEntry)lcEntries.SelectedItem.Value;

一旦开始传递查询结果或需要在其包含方法之外访问它,通常首选定义适当的类型。但是,您也可以通过使用动态或运行时绑定(bind)在技术上绕过它。我不会推荐它,但它是一种可用的方法。

dynamic entry = lcEntries.SelectedItem.Value;
MessageBox.Show(entry.EntryText); // no compile-time support, purely runtime

关于c# - 使用 LINQ Select New 时的转换问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8684322/

相关文章:

c# - 是否可以为 INI 文件中的特定部分添加多个部分名称

c# - 让服务在 Azure 辅助角色内运行

c# - 删除另一个文件后无法创建另一个文件,因为它已被另一个进程使用

asp.net - Linq 多对多?

c# - Lambda 表达式帮助

c# - 为什么 Process.PrivateMemorySize64/1024 与 Windows 任务管理器内存(专用工作集)不匹配?

c# - Java 的 getClass()、isAssignableFrom() 等的 c# 等价物是什么?

c# - 如何找到字符串中特定句子的所有出现?

C# Linq 将元素添加到满足条件的对象列表中

c# - 如何在 XDocument 元素的名称中使用 ':' 字符?