在单个 LINQ 语句中使用 .Select 和 .Where

2023-12-19

我需要使用 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(使用前将#替换为@)

在单个 LINQ 语句中使用 .Select 和 .Where 的相关文章

随机推荐