我想用System.Linq.Dynamic
动态查询对象。
var selectData = (from i in data
select i).AsQueryable().Where("Name = @0","Bob1");//This works fine with a non-entity object
我know我们无法投射到映射的实体上。我相信这就是这段代码失败的原因
foreach (var item in rawQuery.ObsDataResultList)
{
var propertyData = (from i in item
select i).AsQueryable().Where("PropertyName = @0", "blah");
}//item is a Entity Complex Type
错误
无法找到查询模式的实现 源类型'ClassLibrary1.Model.bhcs_ObsData_2_Result'。 '选择'不是 找到。
鉴于我需要在运行时指定PropertyName,我没有看到任何使用匿名类型或DTO进行投影的方法。
此时我不需要保留任何实体功能,我只需要数据。将数据复制到可查询的内容是一种有效的解决方案。那么,是否可以使用动态LINQ查询实体框架?
这是实体类头(我正在尝试查询的东西,也就是项目对象)
[EdmComplexTypeAttribute(NamespaceName="MyDbModel", Name="blah_myQuery_2_Result")]
[DataContractAttribute(IsReference=true)]
[Serializable()]
public partial class blah_myQuery_2_Result : ComplexObject
{
答案 0 :(得分:2)
首先,让我澄清一下,System.Linq.Dynamic不是一个完整的Microsoft产品。这只是我们前一段时间发布的一个示例,我们并未彻底测试不同的LINQ实现以正常使用它。如果您正在为EF ObjectContext API寻找完全支持的基于文本的查询语言,那么您应该看一下Entity SQL。
除此之外,如果你想使用System.Linq.Dynamic并且你可以自己测试你没有点击阻止你的应用程序工作的任何东西,那么我会试着看看我是否能提供帮助。我将需要其他信息,因为我不确定我是否理解您的代码段中的所有内容。
首先,我想了解一下,在您的第一个示例中,什么是“数据”以及它来自何处?在你的第二个片段中,什么是“rawQuery”,它来自哪里? Besdies,什么是rawQuery.DataResultList,什么是rawQuery.ObsDataResultList?
另外关于你的第二个片段,似乎你试图在一个实际上不是查询类型的对象之上构造查询运算符(尽管这并不能解释你在调用时得到的错误)在ashable之前,编译器应该抱怨bhcs_ObsData_2_Result不是IEnumerable,也不是非通用的IEnumerable)。
在您提出的答案中,您说您尝试使用ObjectResult,这似乎有所帮助。请注意,ObjectResult不是查询对象,因此它不允许您构建发送到服务器的查询。换句话说,您应用于ObjectResult的任何查询运算符都将在内存中进行评估,如果您不记住这一点,则在应用任何过滤之前,最终可能会将该表中的所有数据都带入内存。
答案 1 :(得分:0)
直接查询ObjectResult<blah_myQuery_2_Result>
而不是blah_myQuery_2_Result
项。例如
var result = (from i in rawQuery.DataResultList
select i).AsQueryable().Where("CreatedDTM > @0", DateTime.Now.Subtract(new TimeSpan(30, 0, 0, 0)));