我需要使用 LINQ 从特定表中收集不同的 ID。问题是我还需要一个 WHERE 语句,该语句应该仅根据我设置的要求过滤结果。对于必须使用这么多 LINQ 来说相对较新,但我或多或少地使用了以下代码:
private void WriteStuff(SqlHelper db, EmployeeHelper emp)
{
String checkFieldChange;
AnIList tableClass = new AnIList(db, (int)emp.PersonId);
var linq = tableClass.Items
.Where(
x => x.UserId == emp.UserId
&& x.Date > DateBeforeChanges
&& x.Date < DateAfterEffective
&& (
(x.Field == Inserted)
|| (x.Field == Deleted)))
)
).OrderByDescending(x => x.Id);
if (linq != null)
{
foreach (TableClassChanges item in linq)
{
AnotherIList payTxn = new AnotherIList(db, item.Id);
checkFieldChange = GetChangeType(item.FieldName);
// Other codes that will retrieve data from each item
// and write it into a text file
}
}
}
我尝试为 var linq 添加 .Distinct 但它仍然返回重复的项目(意味着具有相同的 Id)。我已经阅读了很多网站,并尝试在查询中添加 .Select 但 .Where 子句会中断。还有其他文章中的查询在某种程度上与检索值并将其放入 var 中的方式有所不同。我也尝试使用 .GroupBy 但在使用 Id 作为键时得到“至少一个对象必须实现 IComparable”。
查询实际上有效,我能够按照我需要的规范从列中输出数据,但我似乎无法使 .Distinct 工作(这是唯一真正缺少的东西)。我尝试创建两个变量,其中一个触发不同的调用,然后使用嵌套的 foreach 以确保值是唯一的,但是收集数千条记录对性能的影响太大了。
我也不确定是否必须覆盖或使用 IEnumerable 来满足我的要求,并认为我会问这个问题,以防万一有更简单的方法,或者是否可以同时使用 .Select 和 .Where 工作仅凭一份声明?
你添加了吗Select()
之后Where()
或者之前?
由于并发逻辑,您应该在后面添加它:
1 Take the entire table
2 Filter it accordingly
3 Select only the ID's
4 Make them distinct.
如果您先执行 Select,则Where 子句只能包含 ID 属性,因为所有其他属性都已被编辑掉。
更新:为了清楚起见,此运算符顺序应该有效:
db.Items.Where(x=> x.userid == user_ID).Select(x=>x.Id).Distinct();
可能想添加一个.toList()
最后但这是可选的:)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)