Sean Glover
Sean Glover

Reputation: 520

Filtering this Linq query

I want to use this query:

var queryData = from va in xdoc.Descendants("language")
                select new
                {
                    StringID = va.Parent.Parent.Attribute("id").Value,
                    Language = va.Attribute("name").Value,
                    LanguageData = va.Element("value").Value,
                };

var organizedData = from x in queryData
                    group x by x.StringID into xg
                    select new
                    {
                        StringID = xg.Key,
                        English = xg.SingleOrDefault(x => x.Language == "ENGLISH_US").LanguageData,
                        Custom = xg.SingleOrDefault(x => x.Language == languageBox.SelectedItem.ToString()).LanguageData,
                    };

mainView.DataSource = organizedData.ToList();
mainView.Refresh();

except that as an additional condition for what is retrieved for the Custom anonymous type, its value must be equal to "*".

Why can't I figure this out? I guess I don't know enough about anonymous types or the => operator.

Upvotes: 0

Views: 168

Answers (2)

Rag
Rag

Reputation: 6593

I think this is what you're looking for. I put the value in a temp variable so it doesn't have to be computed twice.

       var organizedData = from x in queryData
                            group x by x.StringID into xg
                            let temp = xg.SingleOrDefault(x => x.Language == languageBox.SelectedItem.ToString()).LanguageData
                            where temp == "*"
                            select new
                            {
                                StringID = xg.Key,
                                English = xg.SingleOrDefault(x => x.Language == "ENGLISH_US").LanguageData,
                                Custom = temp,
                            };

Upvotes: 2

Thomas Levesque
Thomas Levesque

Reputation: 292425

Is that what you want?

mainView.DataSource = organizedData.Where(x => x.Custom == "*").ToList();

Upvotes: 3

Related Questions