C# 在可查询的结果中获取索引

C# 在可查询的结果中获取索引,c#,linq,entity-framework,entity-framework-4,C#,Linq,Entity Framework,Entity Framework 4,我有一个LINQ查询: var result = (from CC in hc.ClaimCodings join CM in hc.ClaimCodingProcedureCodeModifierXrefs on CC.ClaimCodingID equals CM.ClaimCodingID join PCM in hc.ProcedureCodeModifiers on

我有一个LINQ查询:

 var result = (from CC in hc.ClaimCodings
                              join CM in hc.ClaimCodingProcedureCodeModifierXrefs on CC.ClaimCodingID equals CM.ClaimCodingID
                              join PCM in hc.ProcedureCodeModifiers on CM.ProcedureCodeModifierID equals PCM.ProcedureCodeModifierID
                              where CC.CTCustomerSubID == custSub && CC.ClaimID == claimID
                              select new { PCM.ModifierCode });
编辑

它可以返回0到4个项目。我要将每个修改器代码的值设置为属性:

     public string ModCode1 { get; set; }

    public string ModCode2 { get; set; }

    public string ModCode3 { get; set; }

    public string ModCode4 { get; set; }

    Modcode1 = result.ModifierCode.getindex(0).firstordefault();

ModeCode2 = second result's ModifierCode;

etc 

etc

除非我完全错了。我对LINQ还不太好:(

这就是你的想法吗

var result = 
(
   from CC in hc.ClaimCodings
       join CM in hc.ClaimCodingProcedureCodeModifierXrefs 
           on CC.ClaimCodingID equals CM.ClaimCodingID
       join PCM in hc.ProcedureCodeModifiers 
           on CM.ProcedureCodeModifierID equals PCM.ProcedureCodeModifierID
   where CC.CTCustomerSubID == custSub && CC.ClaimID == claimID && 
         PCM.ModifierCode != null
   select PCM.ModifierCode
).ToList();

ModCode1 = result.Length > 0 ? result[0] : null;
ModCode2 = result.Length > 1 ? result[1] : null;
ModCode3 = result.Length > 2 ? result[2] : null;
ModCode4 = result.Length > 3 ? result[3] : null;
主要变化:

  • 在LINQ查询中添加了
    PCM.ModifierCode!=null
    检查
  • 删除了冗余的匿名类型构造
  • 通过
    ToList()
    将LINQ查询结果转换为
    List

然而,正如BrokenGlass所说,您最好存储一个列表。

这就是您的想法吗

var result = 
(
   from CC in hc.ClaimCodings
       join CM in hc.ClaimCodingProcedureCodeModifierXrefs 
           on CC.ClaimCodingID equals CM.ClaimCodingID
       join PCM in hc.ProcedureCodeModifiers 
           on CM.ProcedureCodeModifierID equals PCM.ProcedureCodeModifierID
   where CC.CTCustomerSubID == custSub && CC.ClaimID == claimID && 
         PCM.ModifierCode != null
   select PCM.ModifierCode
).ToList();

ModCode1 = result.Length > 0 ? result[0] : null;
ModCode2 = result.Length > 1 ? result[1] : null;
ModCode3 = result.Length > 2 ? result[2] : null;
ModCode4 = result.Length > 3 ? result[3] : null;
主要变化:

  • 在LINQ查询中添加了
    PCM.ModifierCode!=null
    检查
  • 删除了冗余的匿名类型构造
  • 通过
    ToList()
    将LINQ查询结果转换为
    List
但是,正如BrokenGlass所说,您最好存储一个列表。

您可以对结果调用ToArray(),立即执行查询并返回一个值数组。然后,您可以使用一些三元运算符速记将值分配给属性,以检查数组的长度

res = result.Take(4).ToArray();
Modcode1 = res.Length > 0 ? res[0] : null;
Modcode2 = res.Length > 1 ? res[1] : null;
Modcode3 = res.Length > 2 ? res[2] : null;
Modcode4 = res.Length > 3 ? res[3] : null;
您可以对结果调用ToArray(),以立即执行查询并返回一个值数组。然后,您可以使用检查数组长度的某个三元运算符速记为属性赋值

res = result.Take(4).ToArray();
Modcode1 = res.Length > 0 ? res[0] : null;
Modcode2 = res.Length > 1 ? res[1] : null;
Modcode3 = res.Length > 2 ? res[2] : null;
Modcode4 = res.Length > 3 ? res[3] : null;

“我要设置返回到属性的每个项”← 您能详细说明一下吗?您的结果是一系列字符串;您想如何将它们分配给属性?很抱歉,我不是很清楚。从数据库返回的值应该设置为属性。@broke:仍然不是很清楚。除此之外,不清楚您为什么要使用匿名类型而不仅仅是
select PCM.ModifierCode
。也许他只是想以匿名类型重命名属性。在这种情况下,它是
选择新的{Modcode1=PCM.ModifierCode})
。为什么不使用
列表来代替4个单独的属性?“我想设置返回到属性的每个项”← 你能详细说明一下吗?您的结果是一系列字符串;您想如何将它们分配到属性?对不起,我不是很清楚。从数据库返回的值应该设置为属性。@broke:仍然不是很清楚。除此之外,不清楚您为什么使用匿名类型而不仅仅是
选择PCM.ModifierCode
。也许他只是想在匿名类型中重命名属性。在这种情况下,它是
选择新的{Modcode1=PCM.ModifierCode}
。为什么不使用
列表而不是4个单独的属性?我想这可能是我需要的。我正在使用属性,以便可以绑定到ASP.NET Web表单上列表视图中的4个文本框。在这种情况下,为什么不使用一个
转发器
,为列表中的每个项目构造一个
文本框
?以前从未使用过转发器。。。你有例子吗?我建议你读一两篇教程:我想这可能是我需要的。我正在使用属性,以便可以绑定到ASP.NET Web表单上列表视图中的4个文本框。在这种情况下,为什么不使用一个
转发器
,为列表中的每个项目构造一个
文本框
?以前从未使用过转发器。。。你有例子吗?我建议你读一两篇教程: