使用多个属性的表筛选列表

时间:2016-12-06 14:50:19

标签: c# linq

我在数据库中有一个名为LineDocuments的表,包含三列:

public int Id { get; set;}
public int DocumentId { get; set;}
public int LineId { get; set;}

我有一个方法想要添加新的lineDocuments,但又不想在数据库表中插入DocumentIdLineId组合。

例如,如果存在这样的数据库中的记录:

Id - 1,DocumentId - 1,LineId - 1.还有一个包含DocumentId - 1和LineId记录的列表 - 1不允许插入此记录,因为它已经有了这种组合。

过滤此列表的适当方法是什么?

我现在只添加方法,它看起来像这样:

public void AttachLinesToDocs(List<LineDocuments> linesDocuments)
{
    foreach (var lineDocument in linesDocuments)
    {
        dbConnection.LineDocuments.Add(lineDocument);
    }

    dbConnection.SaveChanges();
}

希望一切都清楚,任何帮助都会受到赞赏。

2 个答案:

答案 0 :(得分:1)

嗯,你可以先检查一下:

public void AttachLinesToDocs(List<LineDocuments> linesDocuments)
{
    var insertValid = from doc in linesDocuments
                      where !dbConnection.LineDocuments
                        .Any(x => x.DocumentId == doc.DocumentId && x.LineId == doc.LineId)
                      select doc;
    foreach (LineDocuments lineDocument in insertValid)
    {
        dbConnection.LineDocuments.Add(lineDocument);
    }
    dbConnection.SaveChanges();
}

在保存有效文档之前,它使用一个查询来检查所有文档。

答案 1 :(得分:0)

这可以帮到你:

public void AttachLinesToDocs(List<LineDocuments> linesDocuments)
{
  var qualifiedLineDocuments = linesDocuments.Where(inputld=> !dbConnection.LineDocuments.Any(ld=> ld.DocumentId== inputld.DocumentId && ld.LineId== inputld.LineId)).ToList();
      qualifiedLineDocuments.ForEach(qld=> 
      {
        dbConnection.LineDocuments.Add(qld);
      });
  }
}