LINQ列表中的一个类

时间:2010-11-24 16:29:10

标签: c# linq

好吧,我有一个大脑阻滞(感恩节前的阴霾,如果你愿意的话)。我已经解构了一个整数来发现设置了什么位(这是根据选定的列表框项目设置的)。因此,如果我的整数值为11,则设置位1,2,4。所以我解构了我的位掩码以获得哪个位。我可以把它放回整数列表或整数数组。

这是我的问题。我有一个存储过程进入数据库并返回一个类的列表。这个类是由我构造的,包含整数,字符串,基本上我在课堂上需要它。该类查找与用户输入的条件匹配的记录。我正在添加多选列表框(完成)并生成一个位掩码,该掩码返回设置(完成)的位的整数值。我进行数据库调用并根据用户输入的条件获取事务列表。我不想重写/添加到我的存储过程,因为它用于其他适当的数量。我只想应用一些LINQ来搜索与列表中的选择相匹配的所有记录。

该列表将返回不同类型的TransactionTypes。我得到了事务类型行号(14个事务类型,14位,1-14是我正在识别的行号)。我做了一个循环来将行号整数添加到整数数组。

for (int i = 0; i <= //countOfSelections is 14; i++)
{
    int num = 0;
    num = (//int of decimal value constructed & (1 << i));
    if (num != 0)
        bits[i] = num;
}

我有一个数据库调用,它使var数据成为类的列表。无论如何循环使用链接并根据选择在.where子句中应用循环?那么类中的RowNumber等于bit []的行号?

编辑:这是更多代码。

我的列表框中有选择(14种交易类型)。

当用户ctrl +单击事务类型并对其进行搜索时,我将所选的事务类型行号添加到整数列表中。因此,如果选择了一个二和四,我的列表包含1,2,4。我不希望有14个where语句或传递14个值,因为这是硬编码的。 (如果我向db表中添加更多内容,那么我必须在其他地方更改此内容)。

为了防止自己不得不这样做,我组装了一个位掩码并得到一个整数值(二进制的十进制数)。我是这样做的:

int total = 0;
//Building the bit mask
for (int c = 0; c < optsNum.Count(); ++c)
{
    for (int i = 0; i <= transTypeCount; i++)
    {
        if ((i +1) == optsNum[c])
            total += (1 << i);
    }
}
return total;

请注意,optsNum是我的整数列表,其中包含用户选择的行号。此外,transTypeCount是一个整数,它是列表框中可能选择的计数。再次,如果选择选项1,2,4。我的返回总数将等于11。

然后我将11传递给某个业务逻辑中的方法。此方法还接收一些其他用户选项(基本下拉框等)。

我有一个包含交易信息的类(包含数量,产品,名称和交易类型(我的行号))。我的数据库调用返回此类的列表,并存储在“var data”中。所以'数据'现在是这些类的列表。

在我的方法中,我现在有数据并且需要根据用户想要查看的所选事务类型过滤data.TransactionID(这是在我使用位掩码制作的十进制数内)。所以我需要解构我的位掩码以找出设置的位。 **我在上面的代码中做了这个,bits []数组将包含一个整数数组。再次,1,2,4。

我想过滤数据以仅获取数据中的TransactionID包含在我的数组位[]中的数据。无论如何,我可以使用LINQ来搜索类,只汇编一个类的列表,其中该类中的事务ID等于我的bits []数组中的事务ID?这将是某种循环...就像循环通过bits []并选择其中transactionID = bits [i]。我对LINQ很新,这让我很困惑。

1 个答案:

答案 0 :(得分:3)

您可以使用加入:

var selectedTransactions =
        from t in data
        join transactionId in bits on t.TransactionID equals transactionId
        select t;