[英]In a C# ASP.NET Core 3.1 application how do I route to a controller then query string?
[英]How do I iterate over an array that's currently a string using C# and add additional values in my ASP.NET Core Application?
我在我的 Web 应用程序中使用 KendoUI。 我们的一个数据库表将一组值作为varchar
存储在单个列中。 每个人对此都有自己的看法,但目前我必须接受它。
数据库服务器
Office_Ids
1,2,3,4,5
我的任务是将办公室名称加入这些 ID,并使这些 ID 在网格中更好(样式化)。 问题是,作为一个字符串是不可变的,所以它开始变得非常复杂。
期望的结果如下:
"<OfficeId>1</OfficeId><OfficeName>Some Name</OfficeName><OfficeId>2</OfficeId><OfficeName>Some Name</OfficeName>"
上述结果还假设我将数据加入到 office 表中。 如果数据存储在单独的表中,通常我会使用正则表达式完成类似上面的操作。 事实上,这不是造成混乱的原因。
这是我的控制器,这只是我尝试解决此问题时的测试控制器操作。 你会看到我在这里做了几件事:
调用我的存储库以获取数据
创建两个列表,一个用于办公室,另一个称为test
用于尝试将上述代码项添加到字符串中。
我从Office_Ids
列中拆分 office Id 数组并返回到列表
然后我遍历该列表并尝试使用字符串插入来弹出这些标签
public IQueryable Read() { IQueryable data = _company.GetAll();
List<string> office_item = new List<string>(); List<string> test = new List<string>(); foreach (var item in data) { office_item = item.Office_Ids .Split(',') .Select(x => x.Trim('"')) .Select(x => x.Trim(' ')).ToList(); foreach (var office in office_item ) { client.Insert(0, "<OfficeId>"); client.Insert(2, "</OfficeId>"); test.Add(client); } } Console.WriteLine(test); return data; }
问题
CompanyReview
的模型如下所示:
namespace MyCompany.Data
{
public class OfficeReview : BaseEntity
{
public string Office_Ids { get; set; }
}
}
我想我已经涵盖了这里的所有内容,但 TL:DR 是我需要分离一个字符串,它是一个值数组,向它添加一些开始和结束标签,然后将它作为我的模型的一部分返回到网格。 之后,我将使用一些正则表达式使其看起来不错。
考虑使用XElement
。 它非常适合使用 Linq 查询的 XML 构造和操作。
var officeItems = new List<string> { "1, 2, 42, 12313", "2, 5, 234", "1" };
var officeIdElements = officeItems
.SelectMany(s => s.Split(new[] { ',', ' ' }, StringSplitOptions.RemoveEmptyEntries))
.Select(id => new XElement("OfficeId", id));
//The output you requested
string officeIds = string.Concat(officeIdElements.Select(idElement => idElement.ToString()));
但是,如果您想对此进行扩展以包含其他元素,例如OfficeName
,那么您可以这样做
var officeElements = officeIdElements.Select(idElement =>
{
var officeName = $"Office { idElement.Name }";
var officeNameElement = new XElement("OfficeName", officeName);
return new XElement("Office", idElement, officeNameElement);
});
如果您需要将其包装在父节点下以获得格式良好的 XML
var officesElement = new XElement("Offices", officeElements);
/*
<Offices>
<Office>
<OfficeId>1</OfficeId>
<OfficeName>Office OfficeId</OfficeName>
</Office>
<Office>
<OfficeId>2</OfficeId>
<OfficeName>Office OfficeId</OfficeName>
</Office>
<Office>
<OfficeId>42</OfficeId>
<OfficeName>Office OfficeId</OfficeName>
</Office>
<Office>
<OfficeId>12313</OfficeId>
<OfficeName>Office OfficeId</OfficeName>
</Office>
<Office>
<OfficeId>2</OfficeId>
<OfficeName>Office OfficeId</OfficeName>
</Office>
<Office>
<OfficeId>5</OfficeId>
<OfficeName>Office OfficeId</OfficeName>
</Office>
<Office>
<OfficeId>234</OfficeId>
<OfficeName>Office OfficeId</OfficeName>
</Office>
<Office>
<OfficeId>1</OfficeId>
<OfficeName>Office OfficeId</OfficeName>
</Office>
</Offices>
*/
如果必须输出字符串,以下方法可能有效:
var officeItems = new List<string> { "1, 2, 42, 12313", "2, 5, 234", "1" };
var officeResults = new List<string>();
foreach (var officeItem in officeItems)
{
foreach (var item in officeItem.Replace(" ", string.Empty).Split(","))
{
var officeName = service.GetOfficeName(item);
officeResults.Add($"<OfficeId>{item}</OfficeId><OfficeName>{officeName}</OfficeName>");
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.