如何根据条件使用FROM..SELECT选择Linq元素?

时间:2012-04-07 12:59:07

标签: c# linq-to-xml

我正在使用from..select linq查询从XML文件中读取数据,数据量巨大。我能看到的最大数据集是1100行,每行包含100个字符。这会导致我的手机挂起并且应用程序崩溃。在模拟器上,它工作正常,但加载需要相当长的时间。

现在我想要的是基于我想要的一些条件包括查询中的数据元素。作为一个例子,我现在拥有的是......

 var dataSet = from r in something.Elements("chapter")
               select new dictChapter{
                   Name = r.Attribute("Name").Value,
                   Desc1 = r.Attribute("Description1").Value,
                   Desc2 = r.Attribute("Description2").Value,
                   Desc3 = r.Attribute("Description3").Value
               };
ListBox.DataContext = dataSet;

但我想根据设置选择说明。我想要的东西(我知道它不起作用,但我想解释我想做什么)

 var dataSet = from r in something.Elements("chapter")
               select new dictChapter{
                   Name = r.Attribute("Name").Value,
                   if (ShowDesc1 == true)
                       Desc1 = r.Attribute("Description1").Value,

                   if (ShowDesc2 == true)
                       Desc2 = r.Attribute("Description2").Value,

                   if (ShowDesc3 == true)
                       Desc3 = r.Attribute("Description3").Value
               };
ListBox.DataContext = dataSet;
  1. 如何在C Sharp实现这一目标?
  2. 我的问题有更好的解决方案吗?
  3. 非常感谢

2 个答案:

答案 0 :(得分:2)

使用conditional operator "?:"

var dataSet = from r in something.Elements("chapter")
               select new dictChapter{
                   Name = r.Attribute("Name").Value,
                   Desc1 = ShowDesc1 ? r.Attribute("Description1").Value : String.Empty,
                   Desc2 = ShowDesc2 ? r.Attribute("Description2").Value : String.Empty,
                   Desc3 = ShowDesc3 ? r.Attribute("Description3").Value : String.Empty,

               };

答案 1 :(得分:2)

您可以尝试以下内容:

var dataSet = from r in something.Elements("chapter")
               select new dictChapter{
                   Name = r.Attribute("Name").Value,
                   Desc1 = (ShowDesc1 ? r.Attribute("Description1").Value : null),
                   Desc2 = (ShowDesc2 ? r.Attribute("Description2").Value : null),
                   Desc3 = (ShowDesc3 ? r.Attribute("Description3").Value : null),
               };

这不完全是你想要的,因为所有Desc1-3属性总是在每个元素上设置,但如果ShowDesc1-3为假,则它们被设置为null。