2016-05-14 27 views
0

这里是我的代码,我希望有人能赐教:实体或复杂类型不能在LINQ to Entities查询中构造?

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); 
} 

给我的错误,我不明白为什么

+0

请填写完整的错误。 –

回答

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 
    }; 
1

这里

.Select(pgc => 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(); 

// ... 
+0

非常感谢! –

相关问题