TableAId
Id
link链相连的字段
TableA
。我想根据
TableB
TableAId
选择
SELECT *,
(SELECT COUNT(*) FROM tableB where tableB.TableAId = tableA.Id) as count
FROM tableA
var data = _context.TableA.AsQueryable();
...
data = data.Select(l => l.TableAId= p.Id).Count();
到目前为止,我有代码:
var data = _context.TableA.AsQueryable();
data = data.Include(p => p.SomeClassA)
.Include(p => p.SomeClassB);
data = data.Where(p => p.Id == somevalue);
data = data.Where(p => p.SomeClassA.Name.Contains(someothervalue));
data = data.Where(p => p.SomeClassA.SomeField.Contains(yetanothervalue));
但在最后一行,p并未被识别为变量。我如何做这项工作?
Edit:
我的原始查询是安静的复杂,已经过滤数据
data = data.Join(
_context.TableB,
groupByQuery => groupByQuery.TableAId ,
TableA => TableA.Id,
(groupByQuery, TableAItem) => new
{
TableAId = groupByQuery.Id,
Count = groupByQuery.Count,
TableAItem = TableAItem
}
);
我尝试添加它,但无法编译 (tableaid&Count不存在):
var data = _context.TableB.AsQueryable();
var groupByCountQuery = data.GroupBy(a=>a.TableAId, (tableAId, tableBItems) => new
{
TableAId = tableAId,
Count = tableBItems.Count()
});
var result = groupByCountQuery.ToList(); // or change to ToListAsync()
如果您只是对计数感兴趣,那么请执行以下操作:
这将为您提供基于tableaid的计数。
如果您在结果中也需要表面处理,则完成CA之后:TableA
llet Say
TableB
具有属性-ID,fielda1和fielda2。 首先,您需要在查询中包含
var data = _context.TableA.Include(p=> p.TableB).AsQueryable();
Select
TableA
方法中,您需要创建一个具有
TableB
的属性及其子女计数的新对象,例如-
var list = data.Select(p =>
new
{
Id = p.Id,
A1 = p.FieldA1,
A2 = p.FieldA2,
Count = p.TableB.Count
}).ToList();
notice,将其分配给一个新的变量list
。那是因为它不会返回
TableA
列表,而是返回具有属性的匿名对象列表-ID,A1,A2和计数。因此,您不能将其分配给先前声明的
data
变量,因为
data
是类型IQueryable<TableA>
,并且您正在对其进行查询。
,您可以声明一个类以保存数据值,例如-
public class MyData
{
public int Id { get; set; }
public string A1 { get; set; }
public string A2 { get; set; }
public int Count { get; set; }
}
使用它像-var list = data.Select(p =>
new MyData
{
Id = p.Id,
A1 = p.FieldA1,
A2 = p.FieldA2,
Count = p.TableB.Count
}).ToList();
如果您想从tablea开始,则可以使用以下LINQ查询:
var data = _context.TableAs.AsQueryable();
var x = (from a in data
join b in _context.TableBs on a.Id equals b.TableAId
group a.TableB by a.Id into g
select new
{
TableAId = g.Key,
TableBItem = g.FirstOrDefault(),
Count = g.Count()
}).ToList();
逆转: