【发布时间】:2021-11-05 20:19:29
【问题描述】:
我正在尝试使用 LINQ 和实体框架复制下面的 SQL,但无法弄清楚应该如何编写。
我的简单 LINQ 版本对每个表进行查询
public IActionResult Index()
{
dynamic view = new ExpandoObject();
view.AppUsers = Context.AppUsers.Count();
view.CustomerShops = Context.CustomerShops.Count();
view.FavouriteOrders = Context.FavouriteOrders.Count();
view.Items = Context.Items.Count();
view.ItemVariations = Context.ItemVariations.Count();
view.MenuCategories = Context.MenuCategories.Count();
view.MenuCategoryProducts = Context.MenuCategoryProducts.Count();
view.Orders = Context.Orders.Count();
view.Products = Context.Products.Count();
view.ProductVariations = Context.ProductVariations.Count();
view.Shops = Context.Shops.Count();
view.Staffs = Context.Staffs.Count();
return View(view);
}
我不时使用这种模式来报告我的列数,并认为这在 LINQ 中应该很容易做到,但到目前为止还没有运气。
这种纯 SQL UNION 只会生成 1 个 SQL 请求,而不是每个表一个请求。
select * from (
select 'asp_net_roles' as type, count(*) from asp_net_roles
union
select 'asp_net_user_roles' as type, count(*) from asp_net_user_roles
union
select 'asp_net_users' as type, count(*) from asp_net_users
union
select 'app_users' as type, count(*) from app_users
union
select 'shops' as type, count(*) from shops
union
select 'staffs' as type, count(*) from shops
union
select 'items' as type, count(*) from items
union
select 'item_variations' as type, count(*) from item_variations
union
select 'products' as type, count(*) from products
union
select 'product_variations' as type, count(*) from product_variations
union
select 'menu_categories' as type, count(*) from menu_categories
) as counters
order by 1;
我看到了部分实现 [linq-group-by-multiple-tables] (https://stackoverflow.com/a/3435503/473923),但这是基于分组数据。
仅供参考:我是 C#/Linq 新手,如果这个接缝很明显,我很抱歉。
【问题讨论】:
-
所以您的
Context.AppUsers.Count()没有返回任何内容或出现问题?我看到Context.AppUsers.Count()它返回了key和value对的总数,如果我误解了,请告诉我。 -
Context.AppUsers.Count() 返回计数(是),但对于 50 个表,我必须调用它 50 次,但使用联合我只能调用一次,我正在尝试在 LINQ 中做联合
-
检查这个我的答案,它会自动生成这个查询:stackoverflow.com/a/66115862/10646316
标签: c# linq entity-framework-core