Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/css/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Entity framework 4 linq到实体:嵌套的.Any()_Entity Framework 4_Linq To Entities - Fatal编程技术网

Entity framework 4 linq到实体:嵌套的.Any()

Entity framework 4 linq到实体:嵌套的.Any(),entity-framework-4,linq-to-entities,Entity Framework 4,Linq To Entities,在存储库中,我需要搜索联系人(c)的功能,以查找searchCriteria(sc)中定义的其他功能的集合。表达式Func如下所示: // no Problem from here ---> c => c.firstName.StartsWith(sc.FirstName) && c.lastName.StartsWith(sc.LastName) && c.addressData.Any(a => a.City.Starts

在存储库中,我需要搜索联系人(c)的功能,以查找searchCriteria(sc)中定义的其他功能的集合。表达式Func如下所示:

// no Problem from here --->  
c => c.firstName.StartsWith(sc.FirstName)  
  && c.lastName.StartsWith(sc.LastName)  
  && c.addressData.Any(a => a.City.StartsWith(sc.City))  
  && c.addressData.Any(a => a.StreetAddr.StartsWith(sc.Street))  
  && c.addressData.Any(a => a.ZIPCode.StartsWith(sc.ZipCode))  
  && c.visit.Any(v=> v.vStartDate >= sc.VisitTimeIntervalStart)  
  && c.visit.Any(v => v.vStartDate <= sc.VisitTimeIntervalEnd)  
  // <-- to here  but this ->  
  && c.contact2feature.Any( 
      c2f => sc.FeaturePattern.Any(       
         ` fp => fp.Item1.featureID == c2f.feature.featureID))     
// thows:  System.Reflection.TargetInvocationException  
// Inner: Unable to process the type System.Tuple 2[], because it has no known mapping to the value layer.   
//这里没有问题-->
c=>c.firstName.StartsWith(sc.firstName)
&&c.lastName.StartsWith(sc.lastName)
&&c.addressData.Any(a=>a.City.StartsWith(sc.City))
&&c.addressData.Any(a=>a.StreetAddress.StartsWith(sc.Street))
&&c.addressData.Any(a=>a.ZIPCode.StartsWith(sc.ZIPCode))
&&c.visit.Any(v=>v.vStartDate>=sc.VisitTimeIntervalStart)
&&c.visit.Any(v=>v.vStartDate sc.FeaturePattern.Any(
`fp=>fp.Item1.featureID==c2f.feature.featureID))
//thows:System.Reflection.TargetInvocationException
//内部:无法处理类型System.Tuple 2[],因为它没有到值层的已知映射。

嗯,
sc.FeaturePattern
似乎是一个
元组,这意味着它不是实体模型/EDMX的一部分。所以LINQtoEntities不知道如何将其转换为SQL。但你可以很容易地解决这个问题:

// extract scalar values from tuple
var featureIds = sc.FeaturePattern.Select(fp => fp.Item1.featureId);

// now do query
// ...
c => c.firstName.StartsWith(sc.FirstName)  
  && c.lastName.StartsWith(sc.LastName)  
  && c.addressData.Any(a => a.City.StartsWith(sc.City))  
  && c.addressData.Any(a => a.StreetAddr.StartsWith(sc.Street))  
  && c.addressData.Any(a => a.ZIPCode.StartsWith(sc.ZipCode))  
  && c.visit.Any(v=> v.vStartDate >= sc.VisitTimeIntervalStart)  
  && c.visit.Any(v => v.vStartDate <= sc.VisitTimeIntervalEnd)  
  // <-- to here  but this ->  
  && c.contact2feature.Any( 
      c2f => featureIds.Contains(       
          fid => fid == c2f.feature.featureID))   
//从元组中提取标量值
var featureIds=sc.FeaturePattern.Select(fp=>fp.Item1.featureId);
//现在进行查询
// ...
c=>c.firstName.StartsWith(sc.firstName)
&&c.lastName.StartsWith(sc.lastName)
&&c.addressData.Any(a=>a.City.StartsWith(sc.City))
&&c.addressData.Any(a=>a.StreetAddress.StartsWith(sc.Street))
&&c.addressData.Any(a=>a.ZIPCode.StartsWith(sc.ZIPCode))
&&c.visit.Any(v=>v.vStartDate>=sc.VisitTimeIntervalStart)
&&c.visit.Any(v=>v.vStartDate featureIds.Contains(
fid=>fid==c2f.feature.featureID)
今天感觉奥运吗?你用EF做这样的事很勇敢