获取IQueryable结果中的索引

时间:2012-05-07 18:14:57

标签: 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 CM.ProcedureCodeModifierID equals PCM.ProcedureCodeModifierID
                              where CC.CTCustomerSubID == custSub && CC.ClaimID == claimID
                              select new { PCM.ModifierCode });

修改

哪个可以返回0到4个项目。我想将每个Modifier代码的值设置为属性:

     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不太满意:(

2 个答案:

答案 0 :(得分:3)

这是你的想法吗?

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检查。
  • 删除了多余的匿名类型构造。
  • 通过List<string>将LINQ查询结果转换为ToList()

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

答案 1 :(得分:1)

您可以在结果上调用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;