2016-10-20 5 views
1

基本的なLINQクエリを作成するときに、ラムダ式を使用してwhere節を追加することができます。query.Where(c => (init.Contains(c.user)));結合された基本LINQクエリでラムダ式を使用する

私の問題は、基本的なLINQクエリでjoinを使用するクエリでwhere句を2つ追加する必要があることです。

重複したコードを防ぐために、古い基本LINQクエリを追加したラムダ式で置き換えようとしています。

これは私のコードです。

var query = from c in db.Clgcom 
      join u in db.Dvusr 
      on c.Comaut equals u.Gitusr 
      // && (initialen.Contains(c.Tstusr) // <-- query.Where(c => (initialen.Contains(c.Tstusr))); 
      // This is what im trying to replace// ^^ This works because its in the same table 
      // || initialen.Contains(u.Clgusr)) // <-- What do i type when i want to include both these conditions? 
      && (c.Modid.StartsWith("C") 
      || c.Modid.StartsWith("M")) 
      select c; 

if(filter != null){ 
    query = query.Where(c => (initialen.Contains(c.Tstusr) 
          || initialen.Contains(u.Clgusr))); 
          // This doesn't work 
} 

where節にこれらの2つの条件を追加するラムダ式を使用する方法はありますか?

または、ラムダ式を使用してすべての基本LINQクエリを置き換える必要がありますか?

+0

参加する必要があるのは 'c.Comaut equals u.Gitusr'です。残りはどこにでもあるはずです。 'c.Comaut'と' u.Gitusr'の間に外部キーの関係がある場合はナビゲーションプロパティを代わりに使うこともできます – juharr

答えて

1

基本的にはを選択するだけで、cuの両方を選択して開始することもできます。その後、あなたはClgcomとして次のことを行うことができ

var temp = from c in db.Clgcom 
      join u in db.Dvusr on c.Comaut equals u.Gitusr 
      where c.Modid.StartsWith("C") || c.Modid.StartsWith("M") 
      select new {c, u}; 

if(filter != null){ 
    temp = temp.Where(x => initialen.Contains(x.c.Tstusr) 
          || initialen.Contains(x.u.Clgusr)); 

var query = temp.Select(x => x.c); 

ClgcomDvusrとの関係が1に、多くの場合は、外部キー関係に基づいてDvusrナビゲーションプロパティを持つ必要があります。

var query = from c in db.Clgcom 
      where (c.Modid.StartsWith("C") || c.Modid.StartsWith("M")) && c.Dvuser != null 
      select c; 

if(filter != null){ 
    query = query.Where(c => initialen.Contains(c.Tstusr) 
          || initialen.Contains(c.Dvusr.Clgusr)); 
+0

はい、私の場合は最初のオプションが有効でした!どうもありがとう! – Roy123

関連する問題