根据条件从列表中选择实体并进行投射

时间:2012-07-03 07:57:34

标签: linq entity-framework

我有这些实体。

   List<Option> lstoption1 = new List<Option>();
   Option opt = new Option();
   opt.OptionText = "Text1"; 
   lstoption1.add(opt)

   Option opt2 = new Option();
   opt2.OptionText = "Text2"; 
   lstoption1.add(opt2)


   Option opt3 = new Option();
   opt3.OptionText = "Text3"; 
   lstoption1.add(opt3)

我想在新的Option.so中选择OptionText =“Text2”。我写了这个。

  Option optnew =(from i in lstoption1 where i.OptionText ="Text2" select i) as Option

但它抛出一个错误。我们如何使用linq。

感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

  1. 使用firstordefault()以便只返回一个元素。
  2. 使用==代替=运营商

    Option optnew =(from i in lstoption1 where i.OptionText == "Text2" select i).firstordefault() 
    

答案 1 :(得分:0)

就像在if语句中一样,必须使用double =表示相等。我对你的LINQ的调整没有经过测试,但应该接近你需要的。

Option optnew =((from i in lstoption1 where i.OptionText == "Text2" select i).SingleOrDefault()) as Option;

您需要指明您只期望来自where子句的一个结果(SingleOrDefault())。这意味着你要么拥有一个结果,要么没有(null) - 并且因为你使用“as Option”进行转换,所以null值是有效的并且不会抛出异常。