【发布时间】:2018-09-19 10:34:08
【问题描述】:
我有一个对象列表,其中列表中的每个对象都包含一个对象列表。我需要从子列表中的每个对象中选择一个字符串并将其包含在主列表中。基本上将子列表展平。
我们的目标是在电子表格中输入这些数据。
这是我的两个模型
class Phrase
{
public string Parent { get; private set; }
public string Value { get; private set; }
}
class Translation
{
public string Key { get; private set; }
public string Translatable { get; private set; }
public List<Phrase> Phrases { get; private set; }
}
这就是列表的样子
{ Key = "coffee", Translatable = "", Phrase = [{ Parent = "English", Value = "Coffee" }, { Parent = "Swedish", Value = "Kaffe" }] },
{ Key = "candy", Translatable = "", Phrase = [{ Parent = "English", Value = "Candy" }, { Parent = "Swedish", Value = "Godis" }] },
{ Key = "computer", Translatable = "", Phrase = [{ Parent = "English", Value = "Computer" }, { Parent = "Swedish", Value = "Dator" }] }
正如我所说,目标是将这些数据插入到电子表格中,所以根据上面的列表,电子表格理论上应该是这样的:
Key | Translatable | English | Swedish
---------------------------------------------
coffee | | Coffee | Kaffe
candy | | Candy | Godis
computer | | Computer | Dator
我只关心 Phrase 对象中的Value。
您可以像这样从列表中选择Key 和Translatable
var query = from t in parser.translations
from p in t.Phrases
select new { t.Key, t.Translatable };
这会产生
{ Key = "coffee", Translatable = ""},
{ Key = "candy", Translatable = ""},
{ Key = "computer", Translatable = ""}
但是我如何将短语列表中的所有值包含到每个对象中?目标是这样的:
{ Key = "coffee", Translatable = "", Value1 = "Coffee", Value2 = "Kaffe"},
{ Key = "candy", Translatable = "", Value1 = "Candy", Value2 = "Godis"},
{ Key = "computer", Translatable = "", Value1 = "Computer", Value2 = "Dator"}
任何帮助表示赞赏。
【问题讨论】:
-
我想你快到了。试试这个:
var query = from t in parser.translations from p in t.Phrases select new { Key = t.Key, Translatable = t.Translatable, Value1 = p.Single(phrase => phrase == "English").Value, Value2 = p.Single(phrase => phrase == "Swedish").Value }; -
我怀疑这是可能的。问题是您的结果的
Value1、Value2、Value3.. 中的递增计数器。 linq 的select语句中有一个重载,它有一个索引作为参数,但我看不到这个 heps。但我很想被证明是错误的。 -
var query = from t in parser.translations select new { t.Key, t.Translatable, Phrases = t.Phrases.Select(z => z.Value).ToList() };返回什么?这对您的上下文有用吗?