c# - 循环与自定义类

标签 c# for-loop

我正在使用两个“(列表)中的列”样式规则编写动态 sql 查询的 where 子句。

我可以多次看到这种情况出现在 int ID 对上,例如 LocationID/ProductID 或 TransactionID/FeeID。

以下示例不需要将类放在方法之外,并从 WHERE 条件中删除重复项:

  var x = (from DataRow row in expected.Rows
            select row.ItemArray[0]).Distinct().ToArray()
  var y = (from DataRow row in expected.Rows
            select row.ItemArray[1]).Distinct().ToArray();
  for (int i = 0; i < x.Length; i++)
  {
       com.Parameters.AddWithValue("@x" + i, int.Parse(TIDs[i].ToString()));
  }
  for (int i = 0; i < y.Length; i++)
  {
       com.Parameters.AddWithValue("@y" + i, int.Parse(ItemIDs[i].ToString()));
  }

这个样本是否比重复性较低的样本更可取,还是有更好的选择?

  public class xy 
  {
    public int x;
    public int y;
  }
  var xy = (from DataRow row in expected.Rows
          select new xy()
          {
              x = int.Parse(row.ItemArray[0].ToString()),
              y = int.Parse(row.ItemArray[1].ToString())
          }).Distinct().ToArray();
  for (int i = 0; i < xy.Length; i++)
  {
    com.Parameters.AddWithValue("@x" + i, xy[i].x);
    com.Parameters.AddWithValue("@y" + i, xy[i].y);
  }

querystring += "@x"+ i + ", ";

两者都需要循环

最佳答案

它们是不同的查询。第一个获得一个不同的列表 X s 和一个不同的列表 Y秒。第二个是试图获得X 的不同列表。和 Y 组合。然而自xy被定义为 class而不是 struct您将拥有多个具有相同值 x 的实例和 y .

如果只关心不同的组合,您可以通过使用匿名类型来避免使用自定义类(并避免引用相等性问题):

var xy = (from DataRow row in expected.Rows
          select new
          {
              x = int.Parse(row.ItemArray[0].ToString()),
              y = int.Parse(row.ItemArray[1].ToString())
          }).Distinct().ToArray();
  for (int i = 0; i < xy.Length; i++)
  {
    com.Parameters.AddWithValue("@x" + i, xy[i].x);
    com.Parameters.AddWithValue("@y" + i, xy[i].y);
  }

可能使用第二种方法获得更好的性能,因为您只枚举了一次源列表,但除非这是一个重大瓶颈,否则它可能不会对整体产生影响。

关于c# - 循环与自定义类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34211574/

相关文章:

c# - 哪种图遍历算法适合这种情况

c++ - 我如何在 C++ 中的 for 循环之外保存一个字符串

ios - 动画 UILabel 值增量

Javascript - 如果条件引用数组,则循环跳过内部代码

javascript for() 循环、split() 和数组问题

C# - 如何使用 Linq 和 Regex 实现单个字符串的多重匹配?

c# - 删除自托管 Web Api 响应中的服务器 header

c# - 来自 Windows 应用程序 c# 的图像保存问题

c# - C# DLL 库中的 String.ToLower

javascript - 我需要在 JavaScript 中使用 setTimeout 停止循环