gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 21:50:15 25 4
gpt4 key购买 nike

我有以下代码:

    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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com