Asp.net-Mvc-3

LINQ to Entities 不支持指定的類型成員。僅支持初始化器、實體成員和實體導航屬性

  • October 7, 2015

在過去的兩天裡,我一直在想為什麼這不起作用,但對於我的其他表來說,它工作得非常好。我什至測試了包含許多欄位的其他模型。但是這個特殊的,即使只有 2 個欄位也不起作用。我知道我可能會遺漏一個明顯的部分,請幫忙。

這是我的模型

public class ReceivedItem
{        
   public int ReceivedItemID { get; set; }
   public int ItemID { get; set; }
}

視圖模型

public class ReceivedItemViewModel
{
   public int ReceivedItemID { get; set; }
   public int ItemID { get; set; }
}

控制器

[GridAction]
public ActionResult GetReceivedItems()
 {
     return View(new GridModel(GetReceivedItemsViewModels()));
 }

private IQueryable<ReceivedItemViewModel> GetReceivedItemsViewModels()
{
   return db.ReceivedItems
        .Select(
         c => new ReceivedItemViewModel
           { 
              ItemID = c.ItemID
            });
}

看法

@(Html.Telerik().Grid<ReceivedItem>()
.Name("grdItems")
.DataBinding(binding => binding.Ajax()
   .Select("GetReceivedItems", "Receiving"))
.DataKeys(keys => keys.Add(o => o.ItemID))
.Columns(cols =>
{  
   cols.Bound(c => c.ItemID);
})
.Pageable()
.Sortable()
.Groupable()
.Filterable()

)

我使用螢火蟲時遇到的錯誤:

The specified type member 'ReceivedItemID' is not supported in LINQ to Entities. Only initializers, entity members, and entity navigation properties are supported.

據我所知,您無法在 Linq-to-SQL 查詢中初始化非實體對象。嘗試列舉結果,然後使用 Linq 創建您的視圖模型。

你有什麼(我猜這是拋出異常的地方):

// Original Code
return db.ReceivedItems
    .Select(
     c => new ReceivedItemViewModel
       { 
          ItemID = c.ItemID
        });

列舉,然後使用 Linq 創建您的視圖模型:

// First statement
var items = db.ReceivedItems.ToArray(); // Enumerates the collection.
// Second statement
return items.Select(
 c => new ReceivedItemViewModel
   { 
      ItemID = c.ItemID
    });

第一個 Linq 語句被翻譯成 SQL 語句,結果被返回並列舉為一個數組,最後,在第二個語句中,該數組用於創建視圖模型的集合。使用您的原始語句,Linq 語句的 SQL 翻譯必須考慮視圖模型(它無法做到)。

我希望這有幫助。(並且有道理):)

引用自:https://stackoverflow.com/questions/10159539