从db C#中选择一些ID

时间:2019-05-03 17:11:38

标签: c# sql linq

我有一个数据库和Excel文件

我想将字符串导出到excel

如何导出我知道的具有1个id的字符串

您可以在下面看到的代码

_Hours = Rep.Where(o => o.Projects.ProjectGroupID == 4).Where(o => o.Projects.ProjectType == 1).Sum(o => (decimal?)o.TaskEfforts) ?? 0m,

但是我该如何选择几个ID?

这不起作用

 _Hours = Rep.Where(o => o.Projects.ProjectGroupID == 4).Where(o => o.ProjectDescriptionID == 10).Where(o => o.ProjectDescriptionID == 17).Where(o => o.ProjectDescriptionID == 18).Where(o => o.ProjectDescriptionID == 19).Where(o => o.ProjectDescriptionID == 21).Where(o => o.ProjectDescriptionID == 24).Where(o => o.ProjectDescriptionID == 26).Where(o => o.Projects.ProjectType == 1).Sum(o => (decimal?)o.TaskEfforts) ?? 0m,

我知道这是一个错误,但是如何选择一些ID?

感谢答案。

2 个答案:

答案 0 :(得分:2)

之所以不起作用,是因为每个where子句都在处理上一个输出的数据子集。

将列表用于LINQ查询的布尔逻辑。

List<int> ids = new List<int>{ 10, 17, 13, 7 };

_Hours = Rep.Where(o => ids.Contains(o.Projects.ProjectGroupID)).Where(o => o.Projects.ProjectType == 1).Sum(o => (decimal?)o.TaskEfforts) ?? default(int);

通过以这种方式操作布尔值,您实际上可以将整数列表转换为对象列表。

对于您的第二个where子句,我看到您需要一个不同的属性来进一步限制列表。这将是可行的,因为每个where子句都会根据第一个子句的结果进行操作,但是出于读者的考虑,它应该是&&。

_Hours = Rep.Where(o => ids.Contains(o.Projects.ProjectGroupID) && o.Projects.ProjectType == 1).ToList();

答案 1 :(得分:0)

您在正确的轨道上!如评论中所述,您可以使用||。 (OR)运算符,如果ID匹配,则选择o对象。在这种情况下,您只需要一个位置。这是您写出的示例:

_Hours = Rep.Where(o => o.Projects.ProjectGroupID == 4 || o.ProjectDescriptionID == 10 || o.ProjectDescriptionID == 17 || o.ProjectDescriptionID == 18 || o.ProjectDescriptionID == 19 || o.ProjectDescriptionID == 21 ||  o.ProjectDescriptionID == 24 || o.ProjectDescriptionID == 26).Where(o => o.Projects.ProjectType == 1).Sum(o => (decimal?)o.TaskEfforts) ?? 0m,

编辑:在OR末尾没有实现ProjectType属性检查。使其成为自己的WHERE选择器