2017-10-14 3 views
0

データと比較します。誰かが私のLinqステートメント内でdbqueryを追加する方法を助けることができますか? 「ここに追加」というコメントがあります。私は昨日から苦労しています。 LINQ文を作成してすぐにリストを取得することが考えられます。ありがとうございました。LINQクエリは、私のクエリは以下の通りです

String dbwhere = ""; 
if (ddlName.SelectedItem.Value != "") 
{ 
    dbwhere = " && (User.Name == '" + ddlName.SelectedItem.Value.TrimEnd() + "')"; 
} 
if (ddlHeightFrom.SelectedItem.Value != "") 
{ 
    dbwhere = dbwhere + " && (Physical.Height >= '" + ddlHeightFrom.SelectedItem.Value.TrimEnd() + "')"; 
} 
if (ddlHeightTo.SelectedItem.Value != "") 
{ 
    dbwhere = dbwhere + " && (Physical.Height <= '" + ddlHeightTo.SelectedItem.Value.TrimEnd() + ")"; 
} 

var usersquery = (
    from physical in dbContext.Physicals 
    join user in dbContext.User on physical.UserID equals user.UserID 
    join photos in dbContext.Photo on User.UserID equals photos.UserID 
    where photos.PhotoNum == 1 && photos.Status == true 
    // ======= Add dbwhere here ============ 
    select new 
    { 
    photos.PhotoURL, 
    photos.PhotoDescription, 
    user.State, 
    user.Country, 
    physical.EyesColor, 
    physical.HairColorInfo, 
    physical.HairTypeInfo, 
    physical.BodyHeight, 
    physical.BodyWeight, 
    }).ToList(); 

答えて

1
あなたはSQLとLINQを混合を避ける(およびSQLインジェクションから、それを安全に)

var usersquery = (
    from physical in dbContext.Physicals 
    join user in dbContext.User on physical.UserID equals user.UserID 
    join photos in dbContext.Photo on User.UserID equals photos.UserID 
    where photos.PhotoNum == 1 && photos.Status == true 
    select new 
    { 
     physical, 
     user, 
     photos, 
    }; // do not put ToList here! 

今、あなたはあなたの特別なチェックを追加することができますし、あなたのクエリを書き直すことができ

:今

if (ddlName.SelectedItem.Value != "") 
{ 
    var userName = ddlName.SelectedItem.Value.TrimEnd(); 
    usersquery = usersquery.Where(x => x.user.Name == userName); 
} 

if (ddlHeightFrom.SelectedItem.Value != "") 
{ 
    var height = int.Parse(ddlHeightFrom.SelectedItem.Value.TrimEnd()); 
    usersquery = usersquery.Where(x => x.physical.Height >= height); 
} 

// and so on 

をあなたはあなたのデータを具体化することができますToList

var result = usersquery.Select(x => new 
    { 
    x.photos.PhotoURL, 
    x.photos.PhotoDescription, 
    x.user.State, 
    x.user.Country, 
    x.physical.EyesColor, 
    x.physical.HairColorInfo, 
    x.physical.HairTypeInfo, 
    x.physical.BodyHeight, 
    x.physical.BodyWeight 
    }).ToList(); 

注:メモ帳に書きましたので、エラーが発生する可能性があります。しかし、私はアイデアが明確であることを願っています

+0

巨大なデータがあり、これはうまくいきます。ありがとうございました。 – dotNETEngineer

+0

@dotNETEngineerあなたが初めて 'usersquery'を作成したときに、実際にデータが取得されることはありません。 'ToList()'メソッドを使ってすべてのフィルタ(存在する場合)を適用した後にのみ、データが照会されます。だから私のアプローチは一度だけdbをクエリします。 –

+0

ここでいくつかのキャスティングの問題が発生しましたが、私は調査中です... var race = ddlRace.SelectedItem.Value.TrimEnd(); photosquery = photosquery.Where(x => x.Race == race); GeneralList – dotNETEngineer

関連する問題