2017-03-07 1 views
0

I가 다음과 같은 모델Entityframework 코어 쿼리 관련 데이터

Deal.cs

public Guid Id { get; set; } 
public string Code { get; set; } 
public string Name { get; set; } 
public double? Price { get; set; } 

public Guid UserId { get; set; } 
public User User { get; set; } 

User.cs 내가 할 에 노력하고있어

public Guid Id { get; set; } 
public string Name { get; set; } 
public string ResumptionCookie { get; set; } 
public List<Deal> Deals { get; set; } 

을 현재있는 모든 사용자 특정 코드을 가진 거래. 모든 사용자를 확보하고 큰 LINQ 쿼리를 작성할 수는 있지만보다 우아한 방법이 필요합니다.

나는 documentation을 읽었지 만, 내가 찾고있는 것이 아니기 때문에 그것을 파악할 수 없었습니다.

+2

무엇에 대해 사용 :'db.Users.Where (x => x.Deals.Any (y => y.Code == "your_givenCode")); ' –

+0

아, 네, IEnumerable 를 반환합니다. EntityFramework에 관해서는 최적화되어 있습니까? 나는'.Include' 또는'.Collections'을 사용할 필요가 있다고 생각했습니다. 나는 여기에서 최적화가 끝났을 지 모르지만 메모리에있는 모든 데이터를로드하고 애프터 워드를 필터링하는 것을 피하고 싶습니다. – martinni39

+0

위의 코드는 지연로드입니다. 즉, ToList(), First(), Count() 및 기타 메소드를 사용하여 쿼리가 구체화 될 때로드됩니다. 하지만 게으른 로딩이 EF 코어에서 지원되는지 여부는 의심 스럽습니다. –

답변

0

각 사용자가 "지정 코드" 일단 .Distenct() 또는 무엇 아카 쉬 KC 제안을 사용하지 않는 경우와 거래를 가지고 가정 사용자

db.Deals.Where(x=>x.code == "specified code").Select(x=>x.User) 

을 먼저 거래 필터링 선택 시도 할 수 있습니다 코멘트에 (서)

+0

문제는 EF 코어가 아직 지연로드를 지원하지 않는다는 것입니다. 나는 아직도 다른 방법으로 이것을 달성하는 방법을 알 수 없다. – martinni39

+0

.Where 조건 앞에 .Include (x => x.User)를 추가하십시오. –

관련 문제