4

ねえ、私はデータベースからクライアントを引き戻し、インクルードによってすべてのケーススタディを含めるという状況になりました

return (from c in db.Clients.Include("CaseStudies")
        where c.Id == clientId
        select c).First();

しかし、私が今やりたいのは、含まれているケーススタディのwhere句で、deleted=falseのケーススタディのみを返すようにすることです。

こんな感じ

return (from c in db.Clients.Include("CaseStudies")
        where c.Id == clientId
        && c.CaseStudy.Deleted == false
        select c).First();

しかし、これは機能しません:(アイデア

4

3 に答える 3

7

EF v1.0 では、条件付きインクルードはそのままではサポートされていません。しかし、アレックス ジェームズは、ここでよく説明されているちょっとハックな回避策を持っています。 aspx

 var dbquery =
   from c in db.Clients
   where c.Id == clientID
   select new {
      client = c, 
      caseStudies = from cs in c.CaseStudy
                where cs.Deleted==false
                select cs
   };

return dbquery
   .AsEnumerable()
   .Select(c => c.client);

また、この回避策を多対多の関係で機能させることに成功していません。

于 2009-11-05T14:34:12.983 に答える
1

この方法で同様のレコードのグループを返すことができます。GroupBy によって列挙が異なりますが、難しくはありません。

CaseStudies.Include("Client")
           .Where(c => !c.Deleted && c.Client.ID == ClientID)
           .GroupBy(c => c.Client.ID);
于 2009-11-05T14:46:20.143 に答える
0

1 つのオプションは、次のように、結果に対してクエリを実行することです。

var results = (from c in db.Clients.Include("CaseStudies")
               where c.Id == clientId
               select c).First();

results.CaseStudies = (from c in results.CaseStudies
                       where c.Deleted == false
                       select c).ToList();

もちろん、ラムダ式を使用することもできます。

var results = db.Clients
                .Include(c => c.CaseStudies)
                .Where(c => c.ID == clientId).First();

results.CaseStudies = results.CaseStudies.Where(c => !c.Deleted).ToList();
于 2016-01-08T18:38:22.960 に答える