Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 联接datatable和collection并在LINQ C中返回一个列表#_C#_Linq_List_Datatable - Fatal编程技术网

C# 联接datatable和collection并在LINQ C中返回一个列表#

C# 联接datatable和collection并在LINQ C中返回一个列表#,c#,linq,list,datatable,C#,Linq,List,Datatable,我有一个数据表 **Code value stdcode desc**** code1 value1 abcd12 abcjkdh code2 value2 cdfg34 sdfiuysd . . . . . . . . 我有一张单子 **stdcode desc** abcd12 sdfsd fhry67 uisydif

我有一个数据表

**Code    value   stdcode   desc****
  code1   value1  abcd12     abcjkdh
  code2   value2  cdfg34     sdfiuysd
   .       .       .          .
   .       .       .           .
我有一张单子

**stdcode   desc**
  abcd12    sdfsd
  fhry67    uisydif
我想在stdcode上使用linq连接这两个

请提供解决方案

我已经尝试将datatable转换为list,并尝试将两者结合起来

 List<stdcode> listCodes = new List<stdcode>();
     listCodes = (from row in dataTable.AsEnumerable() select row).ToList<stdcode>();


List<stdcode> ResultCodes = from codes in stdallCodes join dataCode in listCodes on codes.stdcode equals dataCode.stdcode select codes;
List listCodes=新列表();
listCodes=(从dataTable.AsEnumerable()中的行选择行);
List ResultCodes=from stdallCodes中的代码在codes上的listCodes中加入dataCode。stdcode等于dataCode。stdcode选择代码;
不转换时出现一些错误

我想要一个包含stdcode、code和value列的结果列表

请尝试以下操作:- 编辑

var query1 = listCodes.Join(query, x => x.STDCode, y => y.STDCode, (x, y) => new{
                y.Code,
                y.Value,
                y.STDCode,
                y.Description,
                x.MyField           
            } );

尝试更简单的方法:

 class Program
        {
            static void Main(string[] args)
            {
                DataTable dtName = new DataTable();
                dtName.Columns.Add("Code");
                dtName.Columns.Add("FirstName");
                dtName.Columns.Add("lastName");

                dtName.Rows.Add("1", "Abhishek", "Shukla");
                dtName.Rows.Add("2", "Deepak", "Singh");
                dtName.Rows.Add("3", "Vinay", "Negi");

                DataTable dtHomeTowns = new DataTable();
                dtHomeTowns.Columns.Add("Code");
                dtHomeTowns.Columns.Add("HomeTown");
                dtHomeTowns.Columns.Add("State");

                dtHomeTowns.Rows.Add("1", "Ajmer", "Rajasthan");
                dtHomeTowns.Rows.Add("2", "Bhiwadi", "Rajasthan");
                dtHomeTowns.Rows.Add("3", "Guwahati", "Orissa");

                var list = (from names in dtName.AsEnumerable()
                            join town in dtHomeTowns.AsEnumerable() on names["Code"] equals town["Code"]
                            select new
                            {
                                Code = names["Code"],
                                FirstName = names["FirstName"],
                                lastName = names["lastName"],
                                HomeTown = town["HomeTown"],
                                State = town["State"],
                            }).ToList();
                foreach (var item in list)
                {
                    Console.WriteLine(String.Format("Code:{0}, FirstName: {1},LastName :                 {2},HomeTown:{3},State:{4}", item.Code, item.FirstName, item.lastName, item.HomeTown, item.State));
                }

                Console.ReadKey();
            }
        }

希望这有帮助

stdcode
是您编写的某种类型吗?如何将数据表行转换为
stdcode
?您得到的确切错误是什么?当然可以..只想问..如果要在结果中包含此字段,我在listCodes中有另一个字段ID??那么你将如何改变?@Shabz请参见编辑。例如,新字段是
MyField
。如何在linq中按计数对结果进行分组。我想按计数对结果进行分组。我想按stdcode的计数对结果进行分组。请参阅我在顶部的问题try this-var items=list.GroupBy(n=>n.code,(key,values)=>new{code=key,count values.count(),Val=values.ToList()});
var query1 = listCodes.Join(query, x => x.STDCode, y => y.STDCode, (x, y) => new{
                y.Code,
                y.Value,
                y.STDCode,
                y.Description,
                x.MyField           
            } );
 class Program
        {
            static void Main(string[] args)
            {
                DataTable dtName = new DataTable();
                dtName.Columns.Add("Code");
                dtName.Columns.Add("FirstName");
                dtName.Columns.Add("lastName");

                dtName.Rows.Add("1", "Abhishek", "Shukla");
                dtName.Rows.Add("2", "Deepak", "Singh");
                dtName.Rows.Add("3", "Vinay", "Negi");

                DataTable dtHomeTowns = new DataTable();
                dtHomeTowns.Columns.Add("Code");
                dtHomeTowns.Columns.Add("HomeTown");
                dtHomeTowns.Columns.Add("State");

                dtHomeTowns.Rows.Add("1", "Ajmer", "Rajasthan");
                dtHomeTowns.Rows.Add("2", "Bhiwadi", "Rajasthan");
                dtHomeTowns.Rows.Add("3", "Guwahati", "Orissa");

                var list = (from names in dtName.AsEnumerable()
                            join town in dtHomeTowns.AsEnumerable() on names["Code"] equals town["Code"]
                            select new
                            {
                                Code = names["Code"],
                                FirstName = names["FirstName"],
                                lastName = names["lastName"],
                                HomeTown = town["HomeTown"],
                                State = town["State"],
                            }).ToList();
                foreach (var item in list)
                {
                    Console.WriteLine(String.Format("Code:{0}, FirstName: {1},LastName :                 {2},HomeTown:{3},State:{4}", item.Code, item.FirstName, item.lastName, item.HomeTown, item.State));
                }

                Console.ReadKey();
            }
        }