【问题标题】:List<T>: searching list items which have property contains value c#List<T>:搜索具有属性的列表项包含值c#
【发布时间】:2018-11-05 10:38:27
【问题描述】:

我已经尝试过这样做

模型类是:

public class Model
{
    public string Title{ get; set; }
    public int PartId { get; set; }
    public bool Valid { get; set; }    
}

有了这个,我可以从 db 获得所有电影:

 List<Model> movies = this._context.ExecuteQuery<Model>(querystring).ToList();

我试图获取所有标题包含(不等于)“怪物”一词的电影

List<Model> results = movies.Where(c=> c.Title.Contains("monster"));

【问题讨论】:

  • 我们需要更多信息。是 LinqToSql 还是 EntityFw ?
  • movies 到底是什么?这显然不是一个简单的List&lt;Model&gt;,而是像 Linq2Sql 或 EntityFramework 这样的查询提供程序的某种查询......
  • 代码按原样无法编译。 List&lt;Model&gt; results = movies.Where(c=&gt; c.Title.Contains("monster")); 鉴于您标记的答案,我已经删除了您问题的不正确部分(这表明您有一个例外,而实际上您有编译时错误)。

标签: c# list linq where


【解决方案1】:

List&lt;Model&gt; results = movies.Where(c=&gt; c.Title.Contains("monster"));

不完整。您需要在使用 Where() 后添加一个运算符 - 在您的情况下,您可能需要 .ToList()

List&lt;Model&gt; results = movies.Where(c=&gt; c.Title.Contains("monster")).ToList();

(或将您的List&lt;Model&gt; 更改为IEnumerable&lt;Model&gt;,甚至var

【讨论】:

  • 虽然 OP 缺少 .ToList() 是正确的,但这并不能解释 OP 收到的错误消息。
  • @RenéVogt 也许是因为他试图在视觉工作室中评估表达式? (见stackoverflow.com/questions/36559399/…)(只是猜测,没有提到)
  • @davidelondei 因为where() 的返回类型是IEnumerable&lt;TSource&gt;。并非所有IEnumerable&lt;TSource&gt; 都是List&lt;TSource&gt;,因此您需要使用IEnumerable 或致电ToList(), ToArray(), First(), FirstOrDefault(),.... 以获取List&lt;T&gt;, Array&lt;T&gt; or T,...
  • 请注意,每次您拨打.ToList() 时,您实际上都会向您的数据库发送请求。那可能不是你想要的。例如,如果您“准备”一个查询,它下面的一些行用于连接不同的表。尽量少发送查询。
  • @nilsK 在这个特定实例中,dognose 提出的更改不会向数据库发送查询(因为movies 已经是List&lt;Model&gt;)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-23
  • 1970-01-01
  • 2011-09-09
  • 1970-01-01
  • 2023-03-08
相关资源
最近更新 更多