问题适用于LinQ的位置和接收

时间:2011-03-24 08:52:17

标签: c# linq

我有一个List<MediaRef>,我想在它上面应用Take和Where条件,但它不起作用我想知道是什么问题。我的问题是

List<MediaRef> objmed = new List<MediaRef>();
objmed = GetRecords(); //GetRecords will fetch records
objmed.Where(e => e.Title.Contains(Keyword)) //This line is not working

并且条件不起作用但是当我将其更改为

List<MediaRef> objmed = new List<MediaRef>();
objmed = GetRecords();
objmed = (from p in objmed 
         where p.Title.Contains(Keyword)
         select p).ToList(); 

工作正常。我使用Take()函数面临同样的问题。可能是什么问题?

5 个答案:

答案 0 :(得分:4)

  

objmed.Where(e =&gt; e.Title.Contains(Keyword))//这一行不起作用

您需要分配结果,Were运算符不会更改源集合,它会创建一个惰性输出集合。

当您枚举Where的结果时,它将读取源集合并返回与条件匹配的元素。在您的工作示例中,您是(1)分配结果,(2)使用ToList强制枚举。

尝试:

// No need to create a List<> only to throw it away
List<MediaRef> objmed = GetRecords();
objmed = objmed.Where(e => e.Title.Contains(Keyword)).ToList();

答案 1 :(得分:1)

试试这个:

List<MediaRef> objmed = new List<MediaRef>();
objmed = GetRecords(); //GetRecords will fetch records
objmed = objmed.Where(e => e.Title.Contains(Keyword));

您忘了将结果分配给某事。

答案 2 :(得分:0)

试试这个......

var records = GetRecords().Where(e => e.Title.Contains(Keyword)).ToList();

如果您要使用ToList()枚举列表,则foreach是不必要的。

答案 3 :(得分:0)

您需要将输出分配给新变量 - 例如

var withWhere = objmed.Where(e => e.Title.Contains(Keyword));
var withTakeAndWhere = withWhere.Take(10);

或者,当然你可以使用流体造型:

List<MediaRef> objmed = 
       GetRecords()
          .Where(e => e.Title.Contains(Keyword))
          .Take(10)
          .ToList();

答案 4 :(得分:0)

你想要达到什么目的? .Where和.Take方法根据给定的条件返回对象列表。

代码应为:

List<MediaRef> objmed = new List<MediaRef>();
objmed = GetRecords(); //GetRecords will fetch records
objmed = objmed.Where(e => e.Title.Contains(Keyword)) //This line is not working