2015-12-15 80 views
1

我将以我非常新的LINQ序言。我正试图通过我的LINQ查询来做一个简单的contains。下面是我的查询:使用包含通过LINQ查询

myList.AddRange(oGal.AddressEntries.Cast<Outlook.AddressEntry>().Select(
    x => new ListDetails 
      { 
      Id = val, 
      Name = x.Name 
      }).Take(400)); 

现在我使用Top 400,但实际上只喜欢对象添加到我的清单包含#。任何人都可以指出我如何实现这一目标的正确方向?

+1

查看[Where方法](https://msdn.microsoft.com/library/bb549418(v = vs.100).aspx)。 – Heinzi

回答

4

沿

东西线
myList.AddRange(oGal.AddressEntries.Cast<Outlook.AddressEntry>() 
    .Where(i=>i.Name.Contains("#")) 
    .Select(
     x => new ListDetails 
      { 
       Id = val, 
       Name = x.Name 
      }).Take(400)); 
+0

谢谢大家。所有这些都做“契约”,但@Jonathan答案似乎是对我的具体情况最“有效”的。 – Code

4

我认为你只是要检查在名称中包含#像你说的

myList.AddRange(oGal.AddressEntries.Cast<Outlook.AddressEntry>() 
     .Where(x => x.Name.Contains("#").Select(
      x => new ListDetails 
      { 
       Id = val, 
       Name = x.Name 
      }))); 
+2

根据集合的大小,这可能效率较低,因为它将返回所有记录,然后在创建新对象后对其进行过滤,而不是在get上过滤它们,并仅创建对象的子集。 – Jonathan

+0

作出编辑以反映这些变化 –

+1

它看起来越来越像我的回答,哈哈 – Roberto

4

这应该做到这一点,利用包含在其中方法:

myList.AddRange(oGal.AddressEntries.Cast<Outlook.AddressEntry>() 
     .Where(x => x.Name.Contains("#")) 
     .Select(
      x => new ListDetails 
       { 
        Id = val, 
        Name = x.Name 
       })); 
+0

我不认为他需要take 400 OP说'现在我正在使用Top 400,但实际上只想添加对象到我的列表中包含#' –

+0

现在看起来更像我的答案:p –