Linq - 如何查询特定列并返回列表

时间:2010-03-31 15:39:04

标签: linq linq-to-entities

我正在尝试编写一个linq查询,该查询只会将实体对象中的某些列返回到列表对象中。

下面是我生成错误的代码(无法将匿名类型的通用列表隐式转换为TBLPROMOTION类型的通用列表):

IQueryable<TBLPROMOTION> matches = webStoreContext.TBLPROMOTION.Include("TBLSTORE").Include("LKPROMOTIONTYPE");

List<TBLPROMOTION> promotionInfo = null;

promotionInfo = (from p in matches
                orderby p.PROMOTION_NM descending
                select new { p.EFFECTIVE_DT, p.EXPIRE_DT, p.IS_ACTIVE, 
                p.PROMOTION_DESC, p.PROMOTION_ID, p.PROMOTION_NM }).ToList();

实现这一目标的最佳方式是什么?我不想在这种情况下执行“select p”并返回与查询关联的所有列。

提前谢谢, 比利

7 个答案:

答案 0 :(得分:5)

你不能var promotionInfo = ()获取匿名类型列表吗?

答案 1 :(得分:4)

好的,基本上你不能将Anonymous类型强制转换为TBLPROMOTION这样的已知类型。

当然,您可以说var promotionInfo =然后获得IEnumerable<{Anonymoustype}>并使用它来做,您想要对promotionInfo做些什么。

另外,我个人更喜欢linq查询的流利版本,眼睛容易,编程节食好,至少对我来说:)。

var promotionInfo = matches
                .OrderByDescending( p => p.PROMOTION_NM)
                .Select( p => new { p.EFFECTIVE_DT, 
                                p.EXPIRE_DT, 
                                p.IS_ACTIVE, 
                                p.PROMOTION_DESC, 
                                p.PROMOTION_ID, 
                                p.PROMOTION_NM})
                .ToList();

答案 2 :(得分:1)

如果您要从L2E查询转移到已定义的类型,则可能需要介于两者之间。我没有尝试编译这个,但是像:


   List<TBLPROMOTION> promotions = new List<TBLPROMOTION>();

var results = from p in matches orderby p.PROMOTION_NM descending select new { p.EFFECTIVE_DT, p.EXPIRE_DT, p.IS_ACTIVE, p.PROMOTION_DESC, p.PROMOTION_ID, p.PROMOTION_NM };

   foreach (var v in results)
   {
       promotions.Add(new TBLPROMOTION(v.EFFECTIVE_DT, v.EXPIRE_DT, v.IS_ACTIVE, 
       v.PROMOTION_DESC, v.PROMOTION_ID, v.PROMOTION_NM));
   }

根据以下评论,您可以尝试以下方式:

<TBLPROMOTION>

....... 对不起:请阅读顶部的补充说明。

你确定TBLPROMOTION对象需要你没有遗漏的任何字段(而不是说“select p”)吗?另外,感觉你的TBLPROMOTION对象将为那些跳过的字段设置属性(因此分配内存),为什么不使用匿名类型或设置仅包含所需属性的辅助类?

答案 3 :(得分:1)

@Billy,以下代码为我工作。

List<TBLPROMOTION> promotionInfo = 
                      (from p in matches
                       orderby p.PROMOTION_NM descending
                       select new TBLPROMOTION(p.EFFECTIVE_DT, p.EXPIRE_DT, p.IS_ACTIVE, 
                                       p.PROMOTION_DESC, p.PROMOTION_ID, p.PROMOTION_NM)
                      ).ToList();

答案 4 :(得分:0)

你试过

吗?
 select new TBLPROMOTION {.....

而不是

 select new {.....

答案 5 :(得分:0)

List<TBLPROMOTION> promotionInfo = null;

promotionInfo = (from p in matches
                orderby p.PROMOTION_NM descending
                select new TBLPROMOTION { COL1 = p.EFFECTIVE_DT, COL2 = p.EXPIRE_DT, COL3 = p.IS_ACTIVE... }).ToList();

其中COL1,COL2,...是您希望填充的TBLPROMOTION上的属性的名称。

答案 6 :(得分:0)

如果您想要表格的一个子集,您有两个选项:

  • @Fredou提到选择新的TBLPROMOTION {...}

  • 其他方法是创建一个具有确切属性的自定义DTO。选择它们就像:

    列出promotionInfo = ...                           选择新的TBLPROMOTION_DTO {                              Effective_dt = ...                           }

HTH