2

我正在使用 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. 我的问题有更好的解决方案吗?

非常感谢

4

2 回答 2

2

使用条件运算符“ ?:

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,

               };
于 2012-04-07T13:03:01.733 回答
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 为 false,它们将设置为 null。

于 2012-04-07T13:04:40.937 回答