gpt4 book ai didi

c# - 考虑到语言环境,是否可以在 LINQ 查询中回退空值?

转载 作者:行者123 更新时间:2023-11-30 12:14:50 24 4
gpt4 key购买 nike

我正在创建一个 C# .NET 3.5 网站。在本网站中,一些内容是从 XML 文件中读取的。这个 XML 文件是从 Excel 文件保存的,所以基本上 Excel 是一种内容管理系统(在这种情况下我不能使用数据库)。我正在使用 LINQ to XML 获取内容对象的集合,以便我可以在 Web 表单上使用它们。我是 LINQ 的新手,但我了解分组和排序等基础知识。

我正在使用以下代码将内容读入集合(在本例中为视频列表):

string path = String.Format(server.MapPath("~/App_Data/Content.{0}.xml"), culture);
XDocument source = cache.Get(path);

bool boolValue = false;

var query =
from video in source.Descendants("Video")
where video.Attribute("Id").Value != null

/* Temporary values */
let featured = video.Attribute("IsFeatured").Value

select new Video
{
Culture = culture,
Id = video.Attribute("Id").Value,
Name = video.Element("Name").Value,
Description = video.Element("Description").Value,
Category = video.Element("Category").Value,
Url = video.Element("Url").Value,
IsFeatured = Boolean.TryParse(featured, out boolValue) ? boolValue : false,
Tags = video.Element("Tags").Value.Split(',').Select(t => t.Trim()).ToArray()
};

return query.ToList();

在当前情况下,每种文化都有一个 xml 文件。一个主要的缺点是它会导致很多冗余值。为了使其更易于管理,我将只有一个 xml 文件。

我想创建一种情况,其中具有相同 ID 的行共享内容,这样我就不必添加冗余值。是否可以对空值进行“回退”?

示例:创建 xml(excel) 文件

如果我想阅读瑞士德语内容,查询将查找语言环境为“de-ch”的值。如果仍然有空值,查询将寻找“更高”的语言环境,在本例中为“de”,最后如果仍然有空值,它将从默认语言环境中获取它们,即“en”。

假设我有一个 Product 对象。它有名称、描述和价格。

以英文 (en) 开头

我将从文化“en”开始,因为这是我的标准文化。在 excel 中我会创建一行:

  • 语言环境 = en
  • 名称 = 产品 1
  • Description=英文说明
  • 价格 = 100

然后是德语 (de)然后我想要一个德语翻译,所以我又添加了一行,但我将 Name 和 price 留空,因为它们是一样的。

  • 语言环境 = de
  • 姓名=
  • Description= 德语描述
  • 价格 =

然后是瑞士德语 (de-ch)在这里我只想添加价格,因为它有不同的货币。

  • Locale = de-ch
  • 姓名=
  • 描述=
  • 价格 = 222

我在 LINQ 中想要的结果

当区域性被 de-ch 时,LINQ 中的返回对象将具有以下值:

  • Locale = de-ch
  • 名称 = 产品 1(来自 en)
  • Description = 德语描述(来自 de)
  • 价格 = 222(来自 de-ch)

我想我可以在普通的 C# 中使用一些循环来完成它,但是你如何在 Linq 中做到这一点?也许有人可以指导我如何在 LINQ 中实现这一目标。

最佳答案

为了让接管者清楚,我建议通过 linq 将其加载到可以处理这种回退形式的数据结构中。

与 Linq 可能需要的任何弗兰肯斯坦方法相比,没有成本或成本很小。

根据我的经验,我还没有看到任何可以做到这一点的东西。其他人可能有 ..

关于c# - 考虑到语言环境,是否可以在 LINQ 查询中回退空值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8804123/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com