我试图在不指定字段的情况下查询DataTable对象,如下所示:
var linqdata = from ItemA in ItemData.AsEnumerable()
select ItemA
但返回的类型是
System.Data.EnumerableRowCollection<System.Data.DataRow>
我需要以下返回类型
System.Data.EnumerableRowCollection<<object,object>>
(与标准的匿名类型一样)
有什么想法吗? 感谢
答案 0 :(得分:4)
如果我理解正确,您希望得到一些您不需要在代码中定义但可以强类型方式使用的对象集合。可悲的是,不,你不能。
匿名类型似乎是某种变种或动态对象,但它实际上是一个强类型类,定义于编译时间。 .NET在幕后自动定义类型。为了使.net能够做到这一点,它必须从用于推断类型定义的代码中获得一些线索。它必须有类似的东西:
from ItemA in ItemData.AsEnumerable()
select ItemA.Item("Name"), ItemA.Item("Email")
所以它知道要定义的成员。没有办法绕过它,信息必须在逻辑上用于定义匿名类型。
根据您尝试这样做的原因,有一些选择。
简而言之,你可以拥有以下三个中的任何两个 :( a)动态,(b)strontly-typed对象,(3)intellisense。但不是全部三个。
答案 1 :(得分:0)
有一种方法可以实现你想要的,但它需要动态linq的知识。您将在运行时构建查询,然后使用它。我不是专家,从来没有真正玩过它,但这里有一个链接到Scott Guthrie的博客 - Dynamic Linq。希望有所帮助。
瓦德