2016-09-23 63 views
0

我有这样一个实体:C# - 的EntityFramework - 填充值的列表

public class Search 
{ 
    public String FirstName {get; set; } 
    public Guid PersonId { get; set; } 
    public Guid CId { get; set; } 
} 

,并在相应的搜索表,每个PERSONID,我有很多的CID。所以,如果我

select * from Search where FirstName = 'D' 

我得到的数据的几行,像:

PersonId  CId  FirstName 
8888888  2222222  D 
8888888  4444444  D 
8888888  3333333  D 

反正是有与CID列表填充实体,而不是获取一个“搜索”为每行?

换句话说,反正是有有“搜索”实体:

public class Search 
{ 
    public String FirstName {get; set; } 
    public Guid PersonId { get; set; } 
    public Guid[] CId { get; set; } 
} 

,并得到一个PERSONID和CID列表?

回答

0
var personId = "888888"; 
    var search = new Search {PersonId = personId }; 
    search.CId = DBContext.Search.Where(x => x.PersonId = personId).Select(x => x.CId).ToList(); 
0

像恩里克说,你可以使用GROUPBY子句,但实体不通过,所以你需要这种支持组,并为客体一类新的您正在寻找:

var results = ctx.Searches.Where(s => s.FirstName == "D") 
            .AsEnumerable().GroupBy(x => x.PersonId) 
            .Select(p => new SearchResult{ 
                FirstName = p.FirstOrDefault().FirstName, 
                PersonId = p.Key.Value, 
                CId = p.Select(z => z.CId).ToArray() 
               }).ToList(); 

而且这可能是类

class SearchResult 
    { 
     public String FirstName {get; set; } 
     public Guid PersonId { get; set; } 
     public Guid[] CId { get; set; } 
    }