【问题标题】:LINQ SqlQuery<T> with random number of fields selected选择随机字段数的 LINQ SqlQuery<T>
【发布时间】:2013-11-13 11:44:08
【问题描述】:

我正在使用 LINQ SqlQuery

进行运行时 sql 查询并从数据库中获取数据
SchoolSoulLibrary.SchoolSoulDataEntities ss = new SchoolSoulLibrary.SchoolSoulDataEntities();
string query1;
    var li = ss.Database.SqlQuery<MasterBank>(query1).ToList();

MasterBank 类在哪里

public Partial class MasterBank
{
        public MasterBank()
        {

        }
        public decimal BankId { get; set; }
        public string BankName { get; set; }
        public Nullable<decimal> UserId { get; set; }
        public Nullable<decimal> SchoolId { get; set; }
}

如果我正在执行这个查询

query1 = "Select * from MasterBank"; or
query1 = "Select BankId,BankName,UserId ,SchoolId  from MasterBank";

它没有给出任何错误并返回所有数据

但是如果我正在执行这个查询

query1 = "Select BankName,SchoolId  from MasterBank";

发生错误
我理解这个错误的原因是它返回了 MasterBank 类的类型的结果,但是我现在可以做什么,因为 query1 正在生成运行时,其中没有 MasterBank 类的随机属性。
除了 SqlQuery 之外,还有其他选择吗?
请推荐

【问题讨论】:

  • BankId 不可为空,因此如果查询未获取 BankId,那么您会收到错误消息!?你可以让 BankId 为空吗?
  • @erikH,它看起来像一个银行标识符,所以我怀疑它是否可以为空。如果是这种情况,我担心它是decimal 而不是Int32Int64(甚至是Guid)。
  • @Moo-Juice,由于您并不总是获取银行 ID,因此不需要它。是否可以创建一个将 BankId 为空的 TempMasterBank 类以及其他属性。然后查询将始终有效,然后您可以转换为 MasterBank 类。如果 BankId 未知,则由您的转换代码决定如何创建 MasterBank 实例。
  • @Moo-Juice,或者您可以调整查询以始终获取 BankId!?

标签: c# sql linq runtime


【解决方案1】:

所有可选的字段都需要在 MasterBank 类中标记为可选(可为空)。

这应该不会造成任何问题:

query1 = "Select BankId ,SchoolId  from MasterBank";

所以最快的解决方法就是让所有字段都可以为空。

【讨论】:

    【解决方案2】:

    编辑

    我原来的答案很离谱……

    我认为您将需要您使用的类型来匹配您期望的结果。所以定义一个新类型来匹配你的查询:

    class SomeClass
    {
        public string BankName {get;set;}
        public int SchoolId {get;set;}
    }
    
    SchoolSoulLibrary.SchoolSoulDataEntities ss = new SchoolSoulLibrary.SchoolSoulDataEntities();
    string query1;
        var li = ss.Database.SqlQuery<SomeClass>(query1).ToList();
    

    如果您直到运行时才知道将返回哪些字段 - 请考虑使用数据集而不是实体框架或尝试以下方法:

    http://www.codeproject.com/Articles/206416/Use-dynamic-type-in-Entity-Framework-4-1-SqlQuery

    【讨论】:

      猜你喜欢
      • 2010-09-08
      • 1970-01-01
      • 2018-12-14
      • 1970-01-01
      • 2016-08-07
      • 2017-09-17
      • 2016-05-21
      • 1970-01-01
      • 2016-01-01
      相关资源
      最近更新 更多