の多対多リレーションシップから結果リストを取得するには、データベース優先アプローチを使用してEntity Framework many-to-many relationがあります。Entity Framework
私のクラスは次のとおりです。
class User
{
public int UserId {get; set;}
// every User has zero or more Products :
public virtual ICollection<Product> Products {get; set;}
... // other properties
}
class Product
{
public int ProductId {get; set;}
// every Product belongs to zero or more Users:
public virtual ICollection<User> Users {get; set;}
... // other properties
}
class MyDbContext : DbContext
{
public DbSet<User> Users {get; set;}
public DbSet<Product> Products {get; set;}
}
私はリストlstProductIds
にproductIdsのリストを持っています。 linq
SQLの場合、私はこのようなことをします。
var str = String.Join(",", lstProductIds);
str = str.Replace(",", "','");
var conn = new SqlConnection(cs);
conn.Open();
var cmd = new SqlCommand("SELECT a.UserId,b.ProductId FROM Users a JOIN Product b on a.UserId = b.UserId WHERE ProductId onId IN ('" + str + "')", conn);
SqlDataReader rdr = cmd.ExecuteReader();
while (rdr.Read())
{
UserDetails.Add(new UserProduct { OrganizationId = Convert.ToString(rdr["UserId "]), ProductId= Convert.ToString(rdr["ProductId"]) });
}
conn.Close();
ユーザーIDとProductIdのリストが表示されます。
私はlinqでも同様のことを試しましたが、これは製品ごとに1つのユーザーIDを与えてしまいます。私が知っているFirstOrDefault()
var UserDetails = db.Products.Where(o => lstProductIds.Contains(o.ProductID.ToString()))
.Select(o => new UserProduct
{ ProductId = o.ID.ToString(),
UserId = o.Users.Select(a => a.UserId.ToString()).FirstOrDefault()
})
.ToList();
は問題であり、それが唯一の製品のために一人のユーザーを選択だが、私はそれは私にすべてのユーザーを取得する方法を変更できますか?
はい、[SelectMany](https://stackoverflow.com/questions/4283866/different-ways-of-using-selectmany) –