在LINQ中加入时进行字符串转换

时间:2014-02-25 13:09:17

标签: sql entity-framework entity-framework-4 entity-framework-5 sql-function

我正在使用LINQ查询从数据库中获取数据,并在LINQ查询中进行连接,

(
from accountTransaction in AccountTransactions
join xlkpQualifier in Enumerations on 
    accountTransaction.LkpQualifier.ToString() equals xlkpQualifier.Value 
select top accountTransaction)
.Take(10);

我在accountTransaction.LkpQualifier.ToString()上得到Exception,即System.ToString()不能在LINQ实体中使用。

但是我在转换为Join上的字符串时遇到问题。 我该怎么办?

1 个答案:

答案 0 :(得分:-1)

在您向我们提供有关字段LkpQualifierxlkpQualifier的SQL类型的更多信息之前,我将回答如下:

您应该(1)更改您的表数据架构并设置相同的数据类型,或(2)编写LINQ查询的原始SQL版本并执行查询

使用EF的原始SQL查询:

using (var db = new Entities())
{
    string myQuery = "SELECT * FROM Table";

    var result = new ObjectQuery<DbDataRecord>(myQuery, db);
    var resultList = result.ToList();
}

在原始SQL查询本身中,您可能必须使用正确类型的CAST函数:

CAST(Enumerations.xlkpQualifier AS System.Int32)

不使用EF的原始SQL查询:

还有一种方法可以在不使用EF的情况下编写原始SQL(当您的表没有主键集并且您无权更改它时非常有用):

using (var conn = new SqlConnection(connectionString))
{
    conn.Open();

    using (var cmd = new SqlCommand())
    {
        cmd.Connection = conn;
        cmd.CommandText = "SELECT * FROM Table";

        var result = cmd.ExecuteScalar(); // or other variations
    }
}