다음과 같은 수업이 있습니다.
public class Header
{
public int Id { get; set; }
....
}
public class Item
{
public int Id { get; set; }
public int HeaderId { get; set; } //FK
public int ItemSequence { get; set; }
public string Value { get; set; }
...
}
Header
와 Item
일대 다 관계가 (각각 Header
많은있다Items
다음이 있습니다 Items
.
{{Id=1, HeaderId=1, ItemSequence =1, Value="A"},
{Id=2, HeaderId=1, ItemSequence =2, Value="B"},
{Id=3, HeaderId=2, ItemSequence =1, Value="C"},
{Id=4, HeaderId=2, ItemSequence =2, Value="D"},
{Id=5, HeaderId=2, ItemSequence =3, Value="B"}}
사전을 찾기위한 쿼리를 작성하고 싶습니다. 키는 ItemSequence
각각 첫 번째 Header
( ItemSequence
= 1)이고 값은 다른 ItemSequence
값입니다. 즉, 다음과 같은 결과를 얻고 싶습니다.
Key: {HeaderId=1, ItemSequence =1} , Values : {"A","B"}
Key: {HeaderId=2, ItemSequence =1} , Values : {"C","D","B"}
다음 쿼리를 작성했습니다.
var result = ctx.Headers
.SelectMany(x => x.Items
.Select(t => new { t.Id,t.ItemSequence,t.HeaderId}))
.?
대신 어떤 코드를 사용해야 ?
합니까?
다음과 같은 것 :
var result =
ctx
.Headers
.ToDictionary(
header => new {
header.Id,
header.Items.First().ItemSequence
},
header =>
header
.Items
.Select(item => item.Value)
.ToList()
);
그러나 모든 헤더에 적어도 하나의 항목이 있다고 가정합니다.
그것에 대해 생각하면 첫 번째 주문 을 원할 수 있습니다 ItemSequence
.이 경우 다음과 같은 것을 사용하십시오.
header.Items.OrderBy(item => item.ItemSequence).First().ItemSequence
항목이없는 헤더를 무시하려면 다음을 사용하십시오.
ctx
.Headers
.Where(header => header.Items.Any())
...
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다