2012-04-23 98 views
2

我目前正在使用EF Code-First,并且想要从数据库中的许多表中获取SELECT数据。这个查询是一个可定制的查询,因此我无法预测我将要检索哪种数据。从SQL Server中检索所有值作为字符串

起初,当我尝试运行ctx.Database.SqlQuery<string>(sql, param)时,遇到DateTime值时遇到异常。我想这样做,而不是在服务器端投它。

有没有人知道我该怎么做呢?它可以在LINQ,LINQ-SQL或纯粹的SQL中 - 只要它能完成工作!感谢球员...

回答

1

您不会得到它。 Linq-to-entities不会转换为字符串列表。您最好的机会是执行普通查询,并对您的应用程序进行转换和转换。

您不知道哪些列用户选择的论点意味着您需要更多动态解决方案 - Linq-to-entities不是您的好工具(除非您尝试使用Dynamic Linq或手动构建表达式树) 。直接使用ESQL或SQL。

+0

不是最好的解决方案,我知道,但我遵循你所做的,并将转换(nvarchar(500),)添加到每个值,并且它创造了奇迹。谢谢! :) – matt 2012-04-23 10:02:43

0

当从多个表中选择数据,使用anonymous types封装属性(字段),你想从这些表中选择进入一个新的实体,是这样的:

var query = _db.Categories.Join(
_db.Products, 
c => c.CategoryId, 
p => p.CategoryId, 
(category, product) => 
    new 
    { 
     ProductName = product.Name, 
     CategoryName = category.Name, 
     ExpiryDate = product.ExpiryDate 
    }); 
+0

我真的不知道我从查询中得到什么;由用户决定。这意味着有时它可以是SELECT [Product]。[Product] [Name],在其他时候,SELECT [Product]。[ExpiryDate]。我只想从查询中获得一个List 。谢谢 – matt 2012-04-23 06:48:34

0

可以实现字符串值通过以这种方式将数据字段转换为字符串:

var query = _db.Categories.Join(
_db.Products, 
c => c.CategoryId, 
p => p.CategoryId, 
(category, product) => 
    new 
    { 
     ProductName = product.Name.toString(), 
     CategoryName = category.Name.toString(), 
     ExpiryDate = product.ExpiryDate.toString() 
    }); 
+0

我真的不知道我从查询中得到什么;由用户决定。这意味着有时它可以是SELECT [Product]。[Product] [Name],在其他时候,SELECT [Product]。[ExpiryDate]。我只想从查询中获得一个List 。谢谢 – matt 2012-04-23 06:46:10

相关问题