在LINQ中使用Union合并列表时显示重复值?

时间:2017-09-05 18:48:45

标签: c# linq

我正在尝试使用LINQ中的Union合并列表,但我不想删除重复的值。

WordJEntities db = new WordJEntities();
string[] barrayk = new string[6] {"12","13","14","12","13","15"};

var sppk = from row in db.table1 where row.Id == 12 select new{row.name };
IEnumerable<object> data8k = null;
for (int i = 0; i < barrayk.Length; i++)
{
    string ajk = barrayk[i]; 
    int ajjk = Convert.ToInt32(ajk);
    var data7k = from row in db.table1 where row.Id == ajjk select new { row.name };
    if (i == 0)
    { 
        data8k = sppk.ToList().Union(data7k).ToList(); 
    }
    else
    { 
        data8k = data8k.Union(data7k).ToList(); 
    }
    int jrj = data8k.ToList().Count;
}

string s4 = js.Serialize(data8k);

输出必须有6条记录,但它有4条记录。

2 个答案:

答案 0 :(得分:2)

使用.Concat代替.Union

答案 1 :(得分:0)

如果它们属于同一类型,则AddRange也应该起作用。

  1. AddRange保留了列表的顺序,但它不会删除Union所做的任何重复,但确实玷污了原始列表。

    sppk.ToList().AddRange((data7k).ToList()); 
    
  2. 如果您不想修改原始列表,请按照建议使用Concat

  3. Fiddle证明了这一点。