带有数据集的数据行过滤数组 c# asp net

datarow filtering array with dataset c# asp net

我有这个运营​​商页面,其中有两个 table 来自数据库的数据,一个 table 与现有运营商和一个 table 与现有用户。如果用户已经是操作员,我希望该行隐藏在 table 中。这是我的代码:

C#:

        var userDetailsList = new List<ContactPartial>();
        TellusAPI.TellusUserDetails userDetails;

        var operators = _administrationSystem.GetOperatorsInformation(userId); //DataSet
        var getUser = webSearch.DoSearchForNameAndNumber(userId, txtSearchForOperator.Text, false, "", "", false, false, out userDetails); //Array

        if (getUser == null)
        {
            userDetailsList.Add(new ContactPartial(userDetails));
            rptAdd.DataSource = null;
        }

        else
        {
            userDetailsList = getUser.Select(x => new ContactPartial(x)).ToList();

            var dv = new DataView(operators.Tables[0]);

            foreach (var Operator in userDetailsList)
            {
                if (!userDetailsList.Contains(Operator)) continue;
                dv.RowFilter = "ID = " + Operator.Id;
            }

            rptAdd.DataSource = userDetailsList; //Repeater
        }

Class:

/// <summary>
/// Class for converting.
/// </summary>
public class ContactPartial
{
    public long Id { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string CompanyName { get; set; }
    public string Email { get; set; }

    public ContactPartial(TellusUserDetails tud)
    {
        if (tud == null)
        {
            return;
        }

        Id = tud.UserID;
        FirstName = tud.FirstName;
        LastName = tud.LastName;
        CompanyName = tud.Organisation.Description;
        Email = tud.Email;
    }

    public ContactPartial(TellusSearchUserInfo tsi)
    {
        if (tsi == null)
        {
            return;
        }

        Id = tsi.ID;
        FirstName = tsi.FirstName;
        LastName = tsi.LastName;
        CompanyName = tsi.CompanyName;
        Email = tsi.Email;
    }
}

所以我现在比较这两个并用 ID 过滤行,但它仍然读取所有行。

        foreach (var Operator in userDetailsList) ******
        {
            if (!userDetailsList.Contains(Operator)) continue;
            dv.RowFilter = "ID = " + Operator.Id;
        }

我发现命名约定存在一些问题。您应该正确地通知什么是操作员以及什么是用户详细信息对象。不要混淆它们。

        foreach (var user in userDetailsList)
        {
            // Since dv is the one which contain operator details
           if (dv.Select("ID= '" + user.Id + "'").Count > 0)
           {
            dv.RowFilter = "ID = " + user.Id;
           }
        }