2009-08-26 105 views
3

在我上一個項目中,我決定使用實體框架,這一切都進展順利,直到我試圖獲得與數據「在」,我得到了一個錯誤。實體框架的集合值參數?

經過一個小小的搜索後,我想出了this postthat post

這就是我要做的

var all = fooelements 
       .Where(l=>controlsToGet 
          .Contains(l.Control.Name)); 

是否有任何與lambda表達式或LINQ實體框架處理呢?

謝謝

+0

什麼是錯誤? – Lazarus 2009-08-26 15:53:29

+0

「無法創建類型爲'System.Collections.Generic.IEnumerable'1的常量值。在此上下文中僅支持基本類型(例如Int32,String和Guid)。」 – 2009-08-26 15:59:15

回答

1

我不知道的方式來產生與EF一WHERE IN條款,但您​​可以使用表達式樹來構建一個WHERE條款,這將考驗每一個你的價值觀:

Expression<Func<FooEntity, bool>> seed = l => false; 
    var predicate = controlsToGet.Aggregate(seed, 
     (e, c) => Expression.Lambda<Func<DataEventAttribute, bool>>(
      Expression.OrElse(
       Expression.Equal(
        Expression.Property(
         Expression.Property(
          e.Parameters[0], 
          "Control"), 
         "Name"), 
        Expression.Constant(c)), 
       e.Body), 
      e.Parameters)); 

    var all = fooelements.Where(predicate); 

如果打印出來predicate,你應該會看到像這樣的表達:在以前的answe

l => ((l.Control.Name = ctrl5) || l.Control.Name = ctrl4 || ... || False) 
+0

非常感謝你 – 2009-08-26 21:42:59