2016-05-27 5 views
0

として参加定義していない拡張メソッドが含まれていないラムダ.JoinがAnonymousType#1' をgeting追加.Where(..LINQのは、私は私が私のLINQラムダの問題を取得していますラムダ.Joinに追加すると

.Where(z => z.Inact_ind == "N" && z.Wwid != null) 

その上に.Joinを追加するまでは問題ありません。

例えば

.Join(Rpm_scrty_emp_info, z => z.Wwid, ei => ei.Wwid, (z, ei) => new{z,ei}) 

LINQクエリ

(Linqpad、Rpm_scrty_rpm_usrsは、本質的にdbcontext dbsetと同じになるように)

var queryAllUsers = Rpm_scrty_rpm_usrs 
      .Join(Rpm_scrty_emp_info, z => z.Wwid, ei => ei.Wwid, (z, ei) => new{z,ei}) 
      .Where(z => z.Inact_ind == "N" && z.Wwid != null) 
      .AsEnumerable() 
      .Select(z => new rpm_scrty_rpm_usr() 
      { 
       usr_id = z.Usr_id, 
       usr_lnm = z.Usr_lnm, 
       usr_pwd = z.Usr_pwd, 
       usr_fnm = z.Usr_fnm, 
       wwid = z.Wwid, 
       apprvr_wwid = z.Apprvr_wwid, 
       chg_dtm = z.Chg_dtm, 
       chg_usr_id = z.Chg_usr_id, 
       dflt_ste_id = z.Dflt_ste_id, 
       cre_dtm = z.Cre_dtm, 
       cre_usr_id = z.Cre_usr_id, 
       lst_pwd_chg_dtm = z.Lst_pwd_chg_dtm, 
       lst_accs_dtm = z.Lst_accs_dtm, 
       email_id = z.Email_id, 
       inact_ind = z.Inact_ind, 
       salt = z.Salt, 
       tel = z.Tel     

       //}); 
      }) 
      .ToList(); 

ポコクラス

public class rpm_scrty_rpm_usr 
{ 

    public string usr_id { get; set; } 

    public string usr_fnm { get; set; } 
    public string usr_lnm { get; set; } 
    public string usr_pwd { get; set; } 
    public string email_id { get; set; } 
    public string wwid { get; set; } 
    public string tel { get; set; } 
    public int dflt_ste_id { get; set; } 
    public DateTime? lst_pwd_chg_dtm { get; set; } 
    public DateTime? lst_accs_dtm { get; set; } 
    public string apprvr_wwid { get; set; } 
    public string inact_ind { get; set; } 
    public string cre_usr_id { get; set; } 
    public DateTime? cre_dtm { get; set; } 
    public string chg_usr_id { get; set; } 
    public DateTime? chg_dtm { get; set; } 
    public string salt { get; set; } 


} 

答えて

2

あなたが返す:

.Join(Rpm_scrty_emp_info, z => z.Wwid, ei => ei.Wwid, (z, ei) => new{z,ei}) 

あなたは、本質的にあなたが参加しようとしている各データソースのプロパティを持つ新しい、匿名型を作成しています。私は、代わりにzオブジェクトを返すだけでいいと思う。試してみてください:

.Join(Rpm_scrty_emp_info, z => z.Wwid, ei => ei.Wwid, (z, ei) => z) 

返されるオブジェクトは、あなたが(それは強く型付けされているため)、それはあなたの.Where()句にプロパティのアクセスできることを意味し、タイプZのでなければなりません。

+0

okが、その作品のおかげでそんなに、それを得ました! –

+0

FYI、この人は基本的に同じ質問をしました、あなたはIMOの回答に値する、私はちょうどここの男のための答えを作成するhttp://stackoverflow.com/questions/37470564/change-syntax-to-linq-to-sql -lambda-join/37472916#37472916 –

+0

あなたは大歓迎です@JeremyMiller、喜んで助けて! –

0

結合後、結合されたクエリの各エントリには、zeiという名前の2つのrpm_scrty_rpm_usrがあります。あなたは、例えば、上のフィルタする1:あなたはどこのステートメントに明確にする必要が

.Where(z => z.z.Inact_ind == "N" && z.z.Wwid != null) 
+0

@ user3485422、あなたのオプションの1つは、2つのプロパティを持つ匿名型の代わりにzを返すことだけです。 – Alireza

+1

大きなポイント!匿名型を返すことで、 "ei"オブジェクトにアクセスする柔軟性も得られます。これは、今後where句に条件を追加する必要がある場合に便利です。 –

関連する問題