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?如有任何建议,我们将不胜感激。

LINQ获取用分隔符分隔的字段值

这是我能想到的最好的。它将产生两个查询,但永远不会将整个表拉入内存。

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))
        };

然而,我建议更改数据库结构,以便为引用项创建一个单独的表。