2012-03-12 4 views
1

これをどのように語っているかわかりませんが、ここになります。私はlinqを使ってサーバーのサービス層を書いています。私はすでにデータベースをセットアップしており、Entityレイヤーを使用してクラスを継承しています(これはWCFレイヤーに置き換えられ、このプロジェクトのソフトウェア要件であるJSONを正しく使用します)。私は現在、ユーザーがカレンダーに参加することが正当であることを証明したい "JoinCalendar"(アプリケーションの主要部分)というメソッドを作成しています。クエリの複数の要求があります

ここでは、この方法の目的は、ユーザが参加しようとすると、ユーザーemailaddressの(ユニークなことをされたカレンダーのfamilyID(ユーザのグループのアイデンティティフィールドを)取るあるstartes

public bool JoinCalendar(int famID, string email) 
{ 
using (FamilySchedulerEntities db = new FamilySchedulerEntities()) 
{ 
    var checkUser = (from u in db.Users 
        where u.familyID.Equals(famID) && !u.emailAddress.Equals(email, StringComparison.InvariantCultureIgnoreCase) 
        select u).FirstOrDefault(); 

    if(checkuser != null){ return false} 
    else 
    { 
    //stuff 
    return true; 
    } 

のコードがあります各ユーザのID)。私は、そのクエリから2つの異なるチェックを実行したいと思います。

は、まず:私はfamilyIDが有効なものであることを確認したい(すなわちfamilyIDがデータベースに保存されている実際の値であることを確認してください。) 第二:あるユーザーに一致しないユーザーの電子メールアドレスを確認してくださいどのファミリーにも登録されています 第3に: "!" LINQクエリでのオペレータは、それは悪い習慣/エチケット

種類について、 サイモン・ジョンソン

PSをORIS。 Linqを使って1週間も経たないうちに、データベースアプリケーションを作成していたので、この初心者をフレンドリーにしてください。理想的には、私はこのサーバのクライアントがセルラー(すなわち、無線LANでない)接続を使用して接続されている可能性があり、データ伝送を絶対最小限に保つ必要があるため、スーパーエレガントのソリューションが必要です。最善の解決策はハードある場合

+0

DBに対してlinqを直接記述するときは、 'Equals'メソッドは使用できません。また、DBの照合は、比較がculture/caseの有無にかかわらず実行されるかどうかを定義します。クエリを実行するときに指定する必要はありません – ntziolis

+0

Im私はあなたの作成の区別を本当に理解できません。馬鹿だ。私は言ったように、linqとデータベースアプリケーションにはまったく新しいと私は正確な専門用語をまだ確信していません – SimonJohnson

答えて

1

あなたの二つの要求のように表現することができ、それがsloooow説明してください:

bool familyExists = db.Users.Any(u => u.familyID == famID); 
bool emailTakenAlready = db.Users.Any(u => u.emailAddress == email); 

これらは独立し要件であるように見えるので、あなたは彼らのために別々のクエリを行うことができます。

Linqクエリで論理的でない(!)を使用することができます。個人的なスタイルの問題です。

+0

これは、それが正確に複数の特定のクエリを実行していない私はうまくいくようです効率的ですが、linqについての私の知識はむしろ...限定されていますので、誰が私を裁定するのですか? – SimonJohnson

+0

電子メールがシステム内の*電子メールと既に一致しているかどうかチェックしたいのですが、それは正しいのですか? – BrokenGlass

+0

それについて考えてみると、 – SimonJohnson

0

あなたはこのようにそれを簡素化することができます。

public bool JoinCalendar(int famID, string email) 
    { 
     using (var db = new DataContext()) 
     { 
      var exists = db.Users.Any(u => u.familyID == famID && u.emailAddress != email); 
      if (exists) 
      { 
       return false; 
      } 
      //stuff 
      return true; 
     } 
    } 

そのクエリがデータベースでの最適化が可能とそれはまた、最も効率的でなければなりません。

+0

これは、私が探している機能のタイプとまったく同じようです。それはむしろ効率的で、そのcertianlyきれいに見える、ありがとう! – SimonJohnson

関連する問題