【发布时间】:2011-05-31 16:23:21
【问题描述】:
我有一种情况需要显示 Items 表中的 ItemID 和 ItemName。假设 ItemID 是 002,ItemName 是 Apple。我在表中有另一个名为 SupplementaryItems 的字段,它存储由 | 分隔的相关 ItemID (分隔符),类似于 003|004|005。我正在使用带有存储库模式的 MVC3,类似于
var items = _dataContext.items.AsQueryable();
items = from i in items
where i.Item_ID.equals(itemId)
select i;
上面带有 itemId 002 的查询将返回 Apple,它工作正常。现在,我还需要显示所有的补充项目及其对应的项目名称,这意味着我需要将补充项目拆分为数组并使用补充项目数组包含项目ID 之类的东西。但是在这种情况下,我需要对数据库进行两次单独的调用,第一次调用将只返回带有 itemID 的项目,其中我将补充项目 ID 存储在变量中。
var supplementMaterialsArr = supplementMaterials.ToString().Split('|');
第二个将返回所有项目,我将遍历第二个以从 ItemID 中获取 ItemName。仅供参考,这种方法需要从控制器进行两次单独的调用,例如
var itemInformationAll = _repository.GetAllItems();
var itemInformation = _repository.GetItemDetailInformation(id);
我认为这不是那么有效的方法。有人对此有更好的解决方案吗?我应该使用 LINQ 自加入吗?但是,如果我使用自联接,我能否通过单个查询获得具有相应 ItemName 的 supplemetaryItem? 任何建议将不胜感激。
【问题讨论】:
-
您有什么理由不创建另一个表来存储补充项目而不是将它们塞进一个字段中?它会让你的事情变得更容易。
-
创建数据库不在我手中。数据库管理员做到了,我要解决这个问题。
标签: c# linq-to-sql join self delimiter