【问题标题】:The entity or complex type cannot be constructed in a LINQ to Entities query? [duplicate]无法在 LINQ to Entities 查询中构造实体或复杂类型? [复制]
【发布时间】:2016-05-14 17:02:09
【问题描述】:

这是我的代码,我希望有人能启发我:

public async Task<ActionResult> Search()
{
    NameValueCollection filter = HttpUtility.ParseQueryString(Request.Params.ToString());

    string term = filter["term"];
    var query = db.ProductGraphicsCards
    .Where(pgc => pgc.GraphicsCardSKU.StartsWith(term))
    .Select(pgc => new ProductGraphicsCard()
    {
        GraphicsCardSKU = pgc.GraphicsCardSKU,
        GraphicsCardMemory = pgc.GraphicsCardMemory
    };

    var products = await query.ToListAsync();

    List<string> items = new List<string>();

    foreach (var product in products)
    {
        items.Add(product.GraphicsCardSKU + " / " + product.GraphicsCardMemory.ToString());
    }

    return Json(items, JsonRequestBehavior.AllowGet);
}

给我一​​个错误,我不明白为什么

【问题讨论】:

  • 请添加完整的错误。

标签: c# entity-framework linq


【解决方案1】:
var query = db.ProductGraphicsCards
    .Where(pgc => pgc.GraphicsCardSKU.StartsWith(term))
    .Select(pgc => new ProductGraphicsCard()
    {
        GraphicsCardSKU = pgc.GraphicsCardSKU,
        GraphicsCardMemory = pgc.GraphicsCardMemory
    };

我想问题就在这里。您将无法将结果提取到映射实体 ProductGraphicsCard 中。尝试提取到未映射的 DTO 或匿名类型。

var query = db.ProductGraphicsCards
    .Where(pgc => pgc.GraphicsCardSKU.StartsWith(term))
    .Select(pgc => new {
        pgc.GraphicsCardSKU,
        pgc.GraphicsCardMemory
    };

【讨论】:

    【解决方案2】:

    这里

    .Select(pgc =&gt; new ProductGraphicsCard()

    您正在尝试投影到实体类中。我不知道为什么,但实体框架不支持它(因此NotSupportedException)。

    解决问题的一种方法是投影成匿名类型:

    var query = db.ProductGraphicsCards
        .Where(pgc => pgc.GraphicsCardSKU.StartsWith(term))
        .Select(pgc => new
        {
            GraphicsCardSKU = pgc.GraphicsCardSKU,
            GraphicsCardMemory = pgc.GraphicsCardMemory
        };
    
    var products = await query.ToListAsync();
    
    // ...
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-11
      • 2017-05-31
      • 2015-02-06
      • 1970-01-01
      • 2023-03-30
      相关资源
      最近更新 更多