Это может быть сокращено, но мне легче читать, если разбить:
// list ids from table
var ids = myTable.Where(x => x.Col1Int == 6 && x.Col2Int >= 1 && x.Col2Int <= 366 && x.Col3Str == "myString").Select(x => x.Id).ToList();
// use in subquery for values (non-distinct)
var vals = myChildTable.Where(x => ids.Contains(x.Id)).Select(x => x.Val).ToList();
// project to distinct dictionary of value, count
var dict = vals.Distinct().ToDictionary(x => x, x => vals.Count(y => y == x));
Кажется, это работает с использованием таких классов:
class ParentEntity
{
public int Id { get; set; }
public int Col1Int { get; set; }
public int Col2Int { get; set; }
public string Col3Str { get; set; }
public ParentEntity(int id, int col1Int, int col2Int, string col3Str)
{
Id = id;
Col1Int = col1Int;
Col2Int = col2Int;
Col3Str = col3Str;
}
}
class ChildEntity
{
public int Id { get; set; }
public int ParentEntityId { get; set; }
public string Val { get; set; }
public ChildEntity(int id, int parentEntityId, string val)
{
Id = id;
ParentEntityId = parentEntityId;
Val = val;
}
}