我正在使用 Scott Guthrie在这里描述的动态 Linq 库。
Scott Guthrie 的例子很棒,我已经使用了相当多的动态 Where 语句。
但是,现在我面临需要使用动态选择功能的情况。Scott Guthrie 展示了此功能的屏幕截图(在文章的最后一个屏幕截图中),但非常聪明地从未解释过它。
问题是,即使代码编译并运行,我也看不出它如何以任何有用的方式工作。也许有反思?
这是一个例子(记住,你必须使用上面文章中Guthrie描述的Dynamic Linq Library,这不是正常的Linq System.Linq)。
在我的示例中,我有一个包含 UserId、FirstName 和 LastName 字段的用户表。但是你使用什么数据库并不重要。这个问题很容易重现。这是我的示例代码:
首先确保您在顶部有这个 using 语句:
using System.Linq.Dynamic;
然后您可以运行以下代码:
using (DataClasses1DataContext dcdc = new DataClasses1DataContext())
{
var x = dcdc.Users.Select("new(UserId, FirstName, LastName)");
foreach (var item in x)
{
Console.WriteLine(item.ToString());
}
}
如您所见,它编译并运行得很好。您从数据库中取回所有记录。但是,我无法找到实际访问新匿名类型的成员的方法。
因为 Select 查询是一个字符串,所以在设计时没有类型推断。所以我不能写:
Console.WriteLine(item.UserId);
编译器不知道匿名类型项有一个名为 UserId 的成员。因此该代码甚至不会编译(即使您在 For..Each 循环期间暂停调试器,您也会看到调试窗口看到有 UserId、FirstName 和 LastName 成员。
那么......这应该如何工作?您如何访问匿名类型的成员?