LINQ过滤器LIST值

时间:2019-06-13 07:19:53

标签: c# .net linq

我有LINQ查询

Label = c.Name.Translations.Select(label => new Label
                {                        
                    Rus = label.Text,
                    Eng = label.Text,
                }),

翻译班

public int Id { get; set; }

public string Text { get; set; }

public virtual ICollection<Translation> Translations { get; set; }



  public class Translation
    {
        public int Id { get; set; }
        public string Language { get; set; }
        public string Text { get; set; }
    }

返回这样的列表

{
"rus":"Нью-Йорк",
"eng":"Нью-Йорк"
},
{
"rus":"New-York",
"eng":"New-York"

我的目标是拥有这样的物品

"rus":"Нью-Йорк",
"eng":"New-York"

我如何过滤它?

4 个答案:

答案 0 :(得分:5)

这应该可以完成:

var labels = new Dictionary<string, string>();
foreach(var item in c.Name.Translations)
{
    labels.add(item.Language, item.Text);
}

编辑

var labels = c.Name.Translations.ToDictionary(t => t.Language, t => t.Text);

答案 1 :(得分:1)

var label = c.Name.Translations.ToDictionary(translation => translation.Language, translation => translation.Text);

这将创建一个字典,可以通过以下方式访问

label["eng"] // This returns "New York"

答案 2 :(得分:0)

您可以通过LINQ查询来实现每个Label类属性:

var resultLabel = new Label
{
    Eng = Translations.FirstOrDefault(trans => trans.Language == "English")?.Text,
    Rus = Translations.FirstOrDefault(trans => trans.Language == "Russian")?.Text,
};

答案 3 :(得分:0)

您可以执行以下操作:

Dictionary<string, string> langText = new Dictionary<string, string>();
c.Name.Translations.ForEach(x => langText.Add(x.Language, x.Text));

langText将包含您的数据。