如何获取EF中的表列列表?

时间:2012-06-01 01:12:36

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

我需要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();

1 个答案:

答案 0 :(得分:0)

从你的评论中我认为这就是你要找的东西。但设计明智,你做的事情很糟糕。我会尽快解释。

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]