2016-12-06 3 views
0

私はLineDocumentsと呼ばれ、3つの列が含まれているデータベース内のテーブルがあります。は、フィルタリスト

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(); 
} 

ホープすべてがクリアされ、任意の助けをいただければ幸いです。

+1

'DocumentId'または' LineId'のどちらかを使って 'LineDocuments'オブジェクトを挿入しますか?私はそれが私のものかどうか分からないが、あなたが何を求めているのかわからない。 – RandomStranger

+0

質問に編集例がある。 – Marius

答えて

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); 
     }); 
    } 
} 
+1

コードなし!=! –

+0

メソッドのパラメータでは、配列を単一のエンティティではなく渡しています。 – Marius

+0

申し訳ありませんモバイル版はそれほどフレンドリーではありません。このコードはforeachループ内になければなりません。 – ajaysinghdav10d

関連する問題