在LINQ查询中转换字段值可能吗?

时间:2011-03-23 13:51:11

标签: c# linq

之前我没有使用LINQ,需要对动态构建的数据表进行动态查询。我正在调查不同的选项,并想知道LINQ是否可以在无类型数据表上运行时模仿此SQL查询示例。根据用户选择的源和字段,数据表的结构是动态的。

LINQ可以这样做:

select CAST(EventID as varchar(8))  + '_' + CAST(UserID as varchar(8)) as UserEventRef 
from tblEvent

我必须允许用户构建自己的查询,并允许他们按照自己的意愿进行计算和转换。

编辑:结果不能强类型。

4 个答案:

答案 0 :(得分:1)

不确定

from t in tblEvent
select new { UserEventRef = EventID.ToString() + "_" + UserID.ToString() }

答案 1 :(得分:0)

肯定可以投,是的。但是,对于动态数据表上的动态查询,它不会非常有用,因为您没有要编码的C#类型。

答案 2 :(得分:0)

这应该有效。这是客户端转型。这意味着从db中查询EventId和UserId,并使用计算属性Summary创建新的匿名类

var result = from e in Event
             select new {
                 e.EventId,
                 e.UserId,
                 Summary = e.EventId.ToString("00000000") + "_" + e.UserID.ToString("00000000") 
             };

答案 3 :(得分:0)

我假设目的是使用强类型结果。您可以选择所需的任何列并将其转换或转换为您想要的任何类型,但我不确定您将如何创建动态用户定义类型。

此代码将执行您在上面显示的内容:

from e in tblEvent
select new
{
    UserEventRef = String.Format("{0}_{1}", EventId.ToString(), UserId.ToString())
}

这将创建一个匿名类型,但它仍然在设计时定义,而不是在运行时定义。