2017-01-21 165 views
0

我有兩個實體模型 -查找列表中的項目存在於另一個列表

public SalesPerson 
{ 
    int PersonId; int DistributionHouseId; 
{ 

public SalesRecord 
{ 
    int RecordId; int PersonId; datetime SalesDate; 
{ 

var persons = Db.SalesPersons.Where(m => m.DistributionHouseId == 1).ToList(); 

var salesRecords = Db.SalesRecords.Where(m => 
         persons.Any(x => x.PersonId==m.PersonId) 
         && DbFunctions.TruncateTime(m.SalesDate) == date) 
         .ToList(); 

這讓我異常Only primitive types or enumeration types are supported in this context.

+0

你'SalesRecord'有兩個'RecordId',而且這兩個類在類的最後都有'{''來代替'}'。 – dasblinkenlight

回答

0

我覺得問題是與日期比較,有時LINQ可以翻譯DBFunction的權利。

試試這個:

var salesRecords = Db.SalesRecords.Where(m => 
    persons.Any(x => x.PersonId == m.PersonId)) 
    .ToList() 
    .where(m=> m.SalesDate.Date == date); 

當使用.ToList方法從SQL加載數據到內存中,在那裏,你可以比較的日期

0

最可能的原因是這樣的條件:

persons.Any(x => x.PersonId==m.PersonId) 

您可以按如下方式重新制作它:

var personIds = Db.SalesPersons 
    .Where(m => m.DistributionHouseId == 1) 
    .Select(p => PersonId) 
    .ToList(); 

則條件的相應的部分將成爲

personIds.Contains(m.PersonId) 

這是現在使用原始類型的集合的條件。

相關問題