Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.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# Linq Into子句缺少字段_C#_Linq - Fatal编程技术网

C# Linq Into子句缺少字段

C# Linq Into子句缺少字段,c#,linq,C#,Linq,我想在输出中也获取公民的姓名,但自动完成不会在列表中显示item.Name\u姓氏。为什么会这样?执行“INTO”子句时该字段丢失了吗 TLDR:在生成临时结果时,我无法检索患者姓名 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace LINQ_INTO_CLAUSE { public clas

我想在输出中也获取公民的姓名,但自动完成不会在列表中显示item.Name\u姓氏。为什么会这样?执行“INTO”子句时该字段丢失了吗

TLDR:在生成临时结果时,我无法检索患者姓名

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace LINQ_INTO_CLAUSE
{

public class Citizen
{
    public int id;
    public string name_surname;
}

public class Illness
{
    public int id;
    public string illnessName;
}
class Program
{
    static void Main(string[] args)
    {
        Citizen[] patients = new[]              { new Citizen {id = 123,    name_surname = "John"       },
                                                  new Citizen {id = 2345,   name_surname = "Derek"      },
                                                  new Citizen {id = 345,    name_surname = "Ahmed"      },
                                                  new Citizen {id = 31345,  name_surname = "Mehmed"     }};

        Illness[] illnesses = new[]             { new Illness { id = 123,   illnessName = "Flu"         },
                                                  new Illness { id = 7726,  illnessName = "Flu"         },
                                                  new Illness { id = 123,   illnessName = "Headache"    },
                                                  new Illness { id = 2345,  illnessName = "Kolera"      },
                                                  new Illness { id = 31345, illnessName = "Kolera"      }};


        var _queryResult = from s in patients
                           join k in illnesses on s.id equals k.id
                           into temporaryResult
                           from c in temporaryResult
                           select c;

        foreach (var item in _queryResult)
        {
            Console.WriteLine(item.id+"-"+item.illnessName);
        }
    }
}
}

您可以将其存储在匿名类型中,而不需要将
输入到

var _queryResult = from p in patients
                   join i in illnesses on p.id equals i.id
                   select new { Patient = p, Illness = i};

foreach (var x in _queryResult)
{
    Console.WriteLine(x.Illness.id + "-" + x.Illness.illnessName + " - " + x.Patient.name_surname);
}
如果您想使用
into
关键字获取一组公民的所有疾病,您仍然可以将其存储为匿名类型。但不要在
之后使用
from
进入
,这会使组再次变平:

var queryResult = from p in patients
                  join i in illnesses on p.id equals i.id
                  into allPatientIllnesses
                  select new
                  {
                      Patient = p,
                      IlnessList = allPatientIllnesses.ToList()
                  };


foreach (var item in queryResult)
{
    Citizen patient = item.Patient;
    string illnesses = string.Join(",", item.IlnessList.Select(i => i.illnessName));
}

您可以将其存储在匿名类型中,而不需要将
输入到

var _queryResult = from p in patients
                   join i in illnesses on p.id equals i.id
                   select new { Patient = p, Illness = i};

foreach (var x in _queryResult)
{
    Console.WriteLine(x.Illness.id + "-" + x.Illness.illnessName + " - " + x.Patient.name_surname);
}
如果您想使用
into
关键字获取一组公民的所有疾病,您仍然可以将其存储为匿名类型。但不要在
之后使用
from
进入
,这会使组再次变平:

var queryResult = from p in patients
                  join i in illnesses on p.id equals i.id
                  into allPatientIllnesses
                  select new
                  {
                      Patient = p,
                      IlnessList = allPatientIllnesses.ToList()
                  };


foreach (var item in queryResult)
{
    Citizen patient = item.Patient;
    string illnesses = string.Join(",", item.IlnessList.Select(i => i.illnessName));
}

你不知道;不需要将
插入…
位,然后您可以创建一个更好的匿名类型,其中包含您需要的详细信息:

var _queryResult = from s in patients
                   join k in illnesses on s.id equals k.id
                   select new
                   {
                       Name = s.name_surname, 
                       Id = k.id, 
                       Illness = k.illnessName 
                   };

foreach (var item in _queryResult)
{
    Console.WriteLine(item.Name + "-" + item.Id + "-" + item.Illness);
}

你不知道;不需要将
插入…
位,然后您可以创建一个更好的匿名类型,其中包含您需要的详细信息:

var _queryResult = from s in patients
                   join k in illnesses on s.id equals k.id
                   select new
                   {
                       Name = s.name_surname, 
                       Id = k.id, 
                       Illness = k.illnessName 
                   };

foreach (var item in _queryResult)
{
    Console.WriteLine(item.Name + "-" + item.Id + "-" + item.Illness);
}


为什么要这样格式化代码?天哪,这有什么不好?因为某种原因,你有50个缩进空间。我必须滚动阅读它,因为我这样做是因为我希望那些对象创建部分看起来更整洁。Lol只需将第一项放在新行上即可!:)为什么要这样格式化代码?天哪,这有什么不好?因为某种原因,你有50个缩进空间。我必须滚动阅读它,因为我这样做是因为我希望那些对象创建部分看起来更整洁。Lol只需将第一项放在新行上即可!:)是的,这是真的,但我想问的是,为什么“into”子句会从结果中删除name_姓氏字段?我的意思是,我希望名字和姓氏也存储在临时结果集中,但事实并非如此。哦,好吧,有时候这个网站很奇怪。两个答案非常相似,但我投了反对票,另一个投了3票!是的,你的答案和上面的答案一样。但是你被否决了,洛威尔·蒂姆的答案好多了,现在他编辑了它,我想我只删除这一个。不,不,不要删除它。你的帖子给了我深刻的见解。是的,这是真的,但我想问的是,为什么“into”子句会从结果中删除name_姓氏字段?我的意思是,我希望名字和姓氏也存储在临时结果集中,但事实并非如此。哦,好吧,有时候这个网站很奇怪。两个答案非常相似,但我投了反对票,另一个投了3票!是的,你的答案和上面的答案一样。但是你被否决了,洛威尔·蒂姆的答案好多了,现在他编辑了它,我想我只删除这一个。不,不,不要删除它。你的帖子给了我深刻的见解。谢谢你,但这并没有回答我的问题。我在问为什么名字和姓氏字段不存储在临时结果集中?@Lyrk:现在它在回答这个问题。从
之后的
将结果展平为
疾病
,您无法再访问该公民。看我的编辑谢谢这真的很重,但我看了你的代码后明白了。谢谢,但这并没有回答我的问题。我在问为什么名字和姓氏字段不存储在临时结果集中?@Lyrk:现在它在回答这个问题。从
之后的
将结果展平为
疾病
,您无法再访问该公民。看看我的编辑谢谢这真的很重,但我看了你的代码后明白了。