查找列表中存在于另一个列表中的项目

时间:2017-01-21 13:35:54

标签: c# linq collections lambda

我有两个实体模型 -

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.

2 个答案:

答案 0 :(得分: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)

现在是一个使用基本类型集合的条件。

答案 1 :(得分: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加载到内存中,在那里你可以比较日期