venerdì 3 settembre 2010

LINQ to Entities - "L'espressione LINQ specificata contiene riferimenti a query associate a contesti diversi"

C# 4.0


Una delle possibili cause di questa eccezione è quella di inserire direttamente nella lambda expression della clausola Where un oggetto var. Per ovviare questo quindi basta assegnare il suo valore ad una variabile.


if (!string.IsNullOrEmpty(typeCode))

{

// Recupero del tipo base della promozione.

var queryType = from pt in orangeRepositoryEntities.PromotionType

where pt.Code.Equals(typeCode)

select pt.BasePromotionType;


query = query.Where(p => p.PromotionType.Contains(queryType.First()));

string basePromotionType = queryType.First();
query = query.Where(p => p.PromotionType.Contains(basePromotionType));

}



if (!string.IsNullOrEmpty(code))

query = query.Where(p => p.Code.Contains(code));

if (!string.IsNullOrEmpty(salesDriveCode))

query = query.Where(p => p.SalesDriveCode.Contains(salesDriveCode));



query = query.Where(p => p.StartValidity >= fromStartValidity.Date && p.StartValidity <= toStartDate);

query = query.Where(p => p.StopValidity >= fromStopValidity.Date && p.StopValidity <= toStopDate);



foreach (var promotion in query)

{



}