- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在玩弄 Subsonic 3.0 SimpleRepository 并尝试使用一个 linq 查询获取菜单和菜单项,但菜单项始终为空
菜单
public class Menu
{
public Menu()
{
MenuId = 0;
MenuName = "";
MenuItems = null;
}
public int MenuId { get; set; }
public string MenuName { get; set; }
public MenuItem MenuItems { get; set; }
}
菜单项
public class MenuItem
{
public MenuItem()
{
MenuItemId = 0;
MenuId = 0;
MenuItemName = "";
}
public int MenuItemId { get; set; }
public int MenuId { get; set; }
public string MenuItemName { get; set; }
}
Linq 查询
var menus = from m in _repo.All<Menu>()
from mi in _repo.All<MenuItem>()
where m.MenuItems.MenuItemId == mi.MenuItemId
select new Menu
{
MenuId = m.MenuId,
MenuName = m.MenuName,
MenuItems = {
MenuItemId = mi.MenuItemId,
MenuItemName = mi.MenuItemName
}
};
有人能告诉我我做错了什么吗?
最佳答案
我想我已经找到了这个问题的实际答案。我一直在 SubSonic 源代码中翻找,发现在将数据读取器映射到对象时使用了两种类型的对象投影:一种用于匿名类型和分组,另一种用于其他所有类型:
这是一个片段:SubSonic.Linq.Structure.DbQueryProvider 的第 269 - 298 行
IEnumerable<T> result;
Type type = typeof (T);
//this is so hacky - the issue is that the Projector below uses Expression.Convert, which is a bottleneck
//it's about 10x slower than our ToEnumerable. Our ToEnumerable, however, stumbles on Anon types and groupings
//since it doesn't know how to instantiate them (I tried - not smart enough). So we do some trickery here.
if (type.Name.Contains("AnonymousType") || type.Name.StartsWith("Grouping`") || type.FullName.StartsWith("System.")) {
var reader = _provider.ExecuteReader(cmd);
result = Project(reader, query.Projector);
} else
{
using (var reader = _provider.ExecuteReader(cmd))
{
//use our reader stuff
//thanks to Pascal LaCroix for the help here...
var resultType = typeof (T);
if (resultType.IsValueType)
{
result = reader.ToEnumerableValueType<T>();
}
else
{
result = reader.ToEnumerable<T>();
}
}
}
return result;
事实证明,SubSonic ToEnumerable 试图将数据读取器中的列名称与您要投影到的对象中的属性相匹配。来 self 的 Linq 的 SQL 查询如下所示:
SELECT [t0].[Id], [t0].[ProductId], [t0].[ReleaseDate], [t0].[ReleasedBy], [t0].[ReleaseNumber], [t0].[RevisionNumber], [t0].[c0]
FROM (
SELECT [t1].[Id], [t1].[ProductId], [t1].[ReleaseDate], [t1].[ReleasedBy], [t1].[ReleaseNumber], [t1].[RevisionNumber], (
SELECT COUNT(*)
FROM [dbo].[Install] AS t2
WHERE ([t2].[ReleaseId] = [t1].[Id])
) AS c0
FROM [dbo].[Release] AS t1
) AS t0
WHERE ([t0].[ProductId] = 2)
请注意 [t0].[c0] 与我的属性名称 NumberOfInstalls 不同。所以 c0 的值永远不会转换到我的对象中。
修复:您只需删除 if 语句并使用慢 10 倍的投影,一切都会正常进行。
关于linq - 亚音速 3.0 和 linq,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1655354/
这是一个令人尴尬的基本 n 层问题。 我在 VS2008 中使用亚音速创建了一个 DAL 项目。它有一个小部件类、一个小部件集合类和一个小部件 Controller 类。 我创建了引用它的业务逻辑项目
我有一个古老的困惑,我正在尝试使用亚音速将其铲入层中。问题是,我有这样的情况: 当 Hal 登录时,他的登录名使用数据库 X 来查找数据,使用数据库 Y 来查找他的帐户,使用数据库 Z 来查找他的联系
我有一个使用 Subsonic 生成的不错的 DAL。有没有办法为 BLL 生成骨架?我不想将 SS 层直接插入我的 GUI。 我浏览了两个 SS 论坛,似乎每个人都称 SSS 生成的层为 DAL,但
尝试使用 linq 在 subsonic 中进行左连接,但它似乎不起作用,我遇到了一个大错误。 我很确定查询是正确的,因为我已经用对象和 Linq2Sql 做了几次。 var
我有一个数据库表(Profile)来描述一个人。该表有一列“性别”(整数)。在 .NET 部分我有: public enum Sex { Male = 1, Female = 2 } public c
据我所知,Subsonic 2.2 需要 MySQL.data 5.2.3 dll。我正在尝试在 Visual Studio 中为 VB 项目集成亚音速 DAL。该项目已经使用了大量数据集。因此,Vi
我正在玩弄 Subsonic 3 的简单存储库,但在理解如何处理外键时遇到了瓶颈...... 如果我有一个产品对象包含 int ID; string name; string description;
我正在为一个重要项目寻找新的 ORM,我习惯于使用 ActiveRecord 进行 nHibernate,并且我已经对 EF4、性能和崩溃的 GUI 有了非常糟糕的体验。 所以在网上搜索我找到了 Su
好的, 我热切地等待 subsonic 3.0 的发布以用作我的低级数据层,现在它已经发布了。我目前正在使用 ActiveRecord 模板(尝试了存储库和高级模板)并且我有一个巨大的请求和几个问题:
有没有办法用 subsonic 执行自连接? 最佳答案 subsonic 上曾经有过关于这个的讨论,现在已经死了。它基本上说: it is [not] possible with SqlQuery y
运行最新版本的 SubSonic (3.0.0.3)。检索单个记录、更改一个字段并调用 .Save 会导致以下代码中的空引用异常: 公共(public)无效更新(IDataProvider 提供者){
我正在尝试使用 Subsonic3 中的 SimpleRepository 功能 - 首先,我必须对 RobC 表示衷心的感谢 - Subsonic 真的很棒,我迫不及待地想看到 SimpleRepo
我正在玩弄 Subsonic 3.0 SimpleRepository 并尝试使用一个 linq 查询获取菜单和菜单项,但菜单项始终为空 菜单 public class Menu { publ
这里有什么问题?这就是我在 Subsonic 2 CodingHorror 示例中发现的方法,但不起作用:( new CodingHorror().Execute("SELECT * FROM pro
我有一个带有主键 (Identity) 和几个 varchar 类型列的简单表。我尝试使用以下语法删除/销毁具有给定主键的记录: SS3Test.DAL.TestClass.Destroy(x =>
有什么区别:.Save(); 。添加();.Update(): 最佳答案 您没有提及您正在使用哪些模板(我将假设 ActiveRecord),但作为一般规则: 如果对象保存将插入IsNew==true
Subsonic 3.0 的新手,想知道如何对对象属性执行 LIKE 运算符。给定以下类(class),我将如何使用 Subsonic 3.0 执行 LIKE 操作。例如 SELECT * FROM
我遇到了以下情况,我有 2 个表(产品和类别)。 Products 表中的字段 CategoryID 具有 Categories 表的外键。 现在,对于我的 CMS 中的数据表,我正在寻找一种方法来根
有人可以帮忙吗?当我尝试生成我的 Structs.cs 文件时,该过程失败并出现错误,因为 MySQL 提供程序未返回 SchemaName。 "错误 3 运行转换:System.ArgumentNu
我最近尝试将一个由 SubSonic 2.2 生成 DAL 的 .net 2.0 项目升级到 Visual Studio 2010 下的 .NET 4.0。 项目转换没有错误,但现在我在尝试启动它时收
我是一名优秀的程序员,十分优秀!