在考虑语言环境的LINQ查询中是否有可能回退空值?

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

我正在使用下面的代码将内容读取到一个集合中(在这种情况下是一个video列表):

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文件。 市长的缺点是会造成很多重复的价值。 为了使它更易于pipe理,我将只有一个xml文件。

我想创build一个具有相同ID的行共享内容的情况,所以我不必添加冗余值。 是否有可能为空值“倒退”?

示例:创buildxml(excel)文件

如果我想阅读瑞士德语内容,查询将查找区域设置为“de-ch”的值。 如果仍有空值,则查询将查找“更高”区域设置(在本例中为“de”),如果仍有空值,则会查找默认区域设置(即“en”)。

比方说,我有一个产品对象。 它有一个名字,一个描述和一个价格。

以英文开头(en)

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

  • Locale = en
  • 名称=产品1
  • 说明=英文说明
  • 价格= 100

然后德语(德)然后我想德语翻译,所以我补充另一行,但我留下的名称和价格为空,因为有相同的。

  • Locale = de
  • 姓名=
  • 说明=德语说明
  • 价格=

那么瑞士德语(de-ch)在这里,我只是想补充一下价格,因为它有不同的货币。

  • Locale = de-ch
  • 姓名=
  • 说明=
  • 价格= 222

我在LINQ中瞄准的结果

当文化将被删除时,LINQ中的返回对象将具有以下值:

  • Locale = de-ch
  • 名称=产品1(来自en)
  • 说明=德语说明(来自de)
  • 价格= 222(从de-ch)

我想我可以在正常的C#中用一些循环来完成,但是如何在Linq中做到这一点? 也许有人可以给我一些方向,我怎么能在LINQ中实现这一点。

为了清晰起见,我将build议通过linq加载它,如何将它join到可以处理这种forms的回退的数据结构中。

与Linq可能需要的任何frankenstein方法相比,将没有成本或很小的成本。

而根据我的经验,我还没有看到任何事情会做到这一点。 别人可能有..