【问题标题】:How to get list of a table columns in EF?如何在 EF 中获取表列的列表?
【发布时间】:2012-06-01 01:12:35
【问题描述】:

我需要 EF 中的一个表的 ColumnName,我有它的 ID。 我的表是这样的:

零售商

[RetailerId] [int] IDENTITY(1,1) NOT NULL,
[RetailerName] [varchar](50) NOT NULL,
[StateName1] [bit] NOT NULL,
[StateName2] [bit] NOT NULL,
[StateName3] [bit] NOT NULL,

国家

   [SId] [int] IDENTITY(1,1) NOT NULL,
   [StateName] [varchar](50) Not Null

我从函数中收到 SId,需要选择位于该州的所有零售商。 类似的东西:

var listOfRetailers = (from m in db.Retailers where m.[a column that it's id is equal to SId] == true select m ).toList();

【问题讨论】:

  • 两张表之间(参照完整性)如何建立联系?
  • 什么是 [bit] 类型的 StateName1、StateName2、StateName3?您如何将这两个表关联起来?
  • StateName1、StateName2 和 StateName3 是州表和 Reatlers 表中的州名,定义了零售商是否在这些州中提供服务。零售商和州表之间没有关系,但零售商中的州名列按州的顺序排列(例如州 = [1,ACT] , [2,NSW] , [3, NT] 和零售商 = [1 , r1 , false , true , false ] , [2, r2 , true, false , true ] 这意味着 r1 只在 NSW 提供服务。r2 在 ACT 和 NT 提供服务)

标签: c# linq entity-framework linq-to-sql


【解决方案1】:

从您的 cmets 来看,我认为这就是您正在寻找的。但是明智的设计你所做的很糟糕。我稍后会解释。

var listOfRetailers;
if(SId == 1)
{
listOfRetailers = db.Retailers.select(r=> r.StateName1.Equals(true)).ToList();
}
else if(SId == 2)
{
listOfRetailers  = db.Retailers.select(r=> r.StateName2.Equals(true)).ToList();
}
else if(SId == 3)
{
listOfRetailers  = db.Retailers.select(r=> r.StateName3.Equals(true)).ToList();
}

编辑

从技术上讲,这是一个糟糕的设计。因为您假设您的 States 表将有 3 条记录

1 - ACT
2 - NSW
3 - NT

对于每个州,零售商表 StateName1、StateName2、StateName3 中都有相应的列

假设您要引入第 4 个状态(例如 4 - VIC)。现在,您需要在“零售商”表中引入一个名为 StateName4 的新列。 (这样做会有代码级别和数据库级别的变化)

此外,您还可以通过新列引入额外无意中听到的未使用/冗余数据。

因为这是many-to-many 的情况(一个州可以有很多零售商,一个零售商可以在很多州),最好的方法是创建 3个表(Retailer、State、RetailerState),其中RetailerState表将起到映射来自StateRetailer表的条目的作用

Retailer
---------
[RetailerId] 
[RetailerName]

State
------
[SId] 
[StateName]

RetailerState
--------------
[RetailerId] 
[SId] 

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-31
  • 2022-01-04
  • 2013-12-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多