0

認定プロセスがあります。現時点では、問題の項目について既に認定されている場合でも、認定テーブルに人が追加されます。

私のビュー ページには、procedureIDActive Directory のユーザー名があります。これをコントローラーメソッドに渡し、コントローラーメソッドがそれらをテーブルに追加します。

ただし、それらが既に存在する場合は、それらを追加する必要はありません。認定日を更新して、他のすべてをそのままにしておきます。

私が問題を抱えているのは、それらが存在するかどうかを確認することです。

[HttpPost]
public ActionResult AddCertification(int procedureID, FormCollection collection)
{
    string[] certifiedUsers = collection["members"].Split(',');

    IPACS_Certification ipacs_certification = new IPACS_Certification();

    foreach (var item in certifiedUsers)
    {
        // Does the certification exist?
        IPACS_Certification doesExist = db.IPACS_Certification.Where(m => m.adUserName == item && m.procedureID == procedureID).Select(m => m);
        ipacs_certification.procedureID = procedureID;
        ipacs_certification.certifiedDate = DateTime.Now;
        ipacs_certification.adUserName = item;

        db.IPACS_Certification.Add(ipacs_certification);
        db.SaveChanges();
    }

    return RedirectToAction("AddCertification");
}

私のテーブルには次の列が含まれています。

certID (key IDENTITY)
procedureID (fkey to Procedure テーブル) CertifiedDate
DATETIME
adUserName NVARCHAR

それらが存在する場合、adUserName と procedureID から行を取得し、一意の単一レコードを取得できるはずです。それらが存在する場合、私がする必要があるのは、certifiedDate を今日の日付に更新することだけです。レコードが見つからない場合は、上記の追加を実行する必要があります。

上記のコードにはエラーがあります:

IPACS_Certification doesExist = db.IPACS_Certification.Where(m => m.adUserName == item && m.procedureID == procedureID).Select(m => m);

タイプ System.Linq.IQueryable を IPACS_Certification に暗黙的に変換することはできません。私はそこに何かが欠けていることを知っています。

4

4 に答える 4

2

1 つのレコードのみを選択する必要があります。

IPACS_Certification doesExist = db.IPACS_Certification.Where(m => m.adUserName == item && m.procedureID == procedureID).Select(m => m).FirstOrDefault();
于 2013-07-25T17:27:57.667 に答える
2

あなたは.Select(m => m)それを返すだろうIEnumerable<T>、あなたが必要とするFirst、またはFirstOrDefault

したがって、クエリは次のようになります。

IPACS_Certification doesExist = 
  db.IPACS_Certification.FirstOrDefault(m => m.adUserName == item && m.procedureID == procedureID);

または、現在のクエリFirstOrDefault()で最後に追加するだけです。

編集:

Enumerable.Anyまたは、次のような現在のクエリで使用できます。

IPACS_Certification doesExist = db.IPACS_Certification
                                    .Where(m => m.adUserName == item && m.procedureID == procedureID)
                                    .Select(m => m);
if(doesExist.Any())
{
  //record exists
}
else
{
  // doesn't exist
}
于 2013-07-25T17:28:07.207 に答える
1

クエリを実行して単一のオブジェクトを取得するには、FirstOrDefault や SingleOrDefault などを使用する必要があります。

IPACS_Certification doesExist = db.IPACS_Certification.Where(m => m.adUserName == item && m.procedureID == procedureID).Select(m => m).FirstOrDefault();
于 2013-07-25T17:28:13.543 に答える