LINQ获取用分隔符分隔的字段值
本文关键字:字段 分隔 分隔符 获取 LINQ | 更新日期: 2023-09-27 17:58:08
我遇到一种情况,需要显示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。现在,我还需要显示所有的supplmentaryItem及其相应的ItemName,这意味着我需要将supplmentary Item拆分为数组,并使用类似supplmentalItemArray包含itemID的东西。但在这种情况下,我需要对数据库进行两次单独的调用,第一次只返回itemID为的项,我将supplmentaryItemID存储在一个变量中。
var supplementMaterialsArr = supplementMaterials.ToString().Split('|');
第二个将返回所有项目,我将循环执行第二个以从ItemID中获取ItemName。仅供参考,这种方法需要从控制器发出两个单独的呼叫,类似
var itemInformationAll = _repository.GetAllItems();
var itemInformation = _repository.GetItemDetailInformation(id);
我认为这不是一个有效的方法。有人能找到更好的解决方案吗?我应该使用LINQ自联接吗?但是,如果我使用自联接,我是否能够通过一个查询获得具有相应ItemName的supplymaryItem?如有任何建议,我们将不胜感激。
这是我能想到的最好的。它将产生两个查询,但永远不会将整个表拉入内存。
var q = from item in
(from item in TblItems
where item.ItemID == 1
select new
{
Name = item.ItemName,
SupplementaryItems = item.SupplementaryItems.Split('|')
}).AsEnumerable()
select new
{
Name = item.Name,
SupplementaryItems = TblItems.Where (x =>
item.SupplementaryItems.Select(y => int.Parse(y))
.Contains(x.ItemID))
};
然而,我建议更改数据库结构,以便为引用项创建一个单独的表。