【问题标题】:Alternative coding to a conditional var inferred-type query LINQ to XML?条件 var 推断类型查询 LINQ to XML 的替代编码?
【发布时间】:2011-08-14 06:32:43
【问题描述】:

这是对此处找到的相关主题的跟进 https://stackoverflow.com/questions/1987485/conditionally-assign-c-var-as-elegant-as-it-gets

如果我正在执行以下操作:

  var query = (SearchString == "" ?
    (
         from MEDIA in xdoc.Descendants("MEDIA")
                    select new
                    {
                        PLAY = MEDIA.Element("PLAY").Value,
                        PIC = MEDIA.Element("PIC").Value,
                        TTL = MEDIA.Element("TTL").Value
                    }
    ):


        from MEDIA in xdoc.Descendants("MEDIA")
                    where MEDIA.Element("TTL").ToString().ToLower().Contains(SearchString)
                    select new
                    {
                        PLAY = MEDIA.Element("PLAY").Value,
                        PIC = MEDIA.Element("PIC").Value,
                        TTL = MEDIA.Element("TTL").Value
                    }
    ) ;

如何声明查询类型以使其在类级别成为静态?

另外,在引用的帖子中,Marc Gravell 指出了一种不同的方法

IQueryable<Part> query = db.Participant;
if(email != null) query = query.Where(p => p.EmailAddress == email);
if(seqNr != null) query = query.Where(p => p.SequenceNumber == seqNr);
...

在我的情况下,我将如何声明/重新编码查询? 这是我的疯狂尝试:)

   IEnumerable<XElement> query = xdoc.Descendants("MEDIA");
    if (SearchString != "" )
        query = query.Where(m => m.Element("TTL").ToString().ToLower().Contains(SearchString));

谢谢。

【问题讨论】:

    标签: linq conditional-operator var inferred-type


    【解决方案1】:

    如何声明查询类型以使其在类级别成为静态?

    你不能。匿名类型是匿名的……所以它们没有可以用来声明变量的名称。您的查询是IEnumerable&lt;something&gt; 类型,但您不能在代码中引用something。因此,您需要创建一个表示查询结果的特定类,并使用它来代替匿名类型。

    【讨论】:

      猜你喜欢
      • 2012-01-14
      • 1970-01-01
      • 2018-10-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多