에서 많은 관계의 결과 목록을 얻으려면 데이터베이스 우선 접근 방식을 사용하여 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에서 비슷한 것을 시도했다. 그러나 이것은 결국 제품 하나당 하나의 userId를 제공하게되었다. 내가 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는) –