C#,MVC4 - EF Linq搜索

时间:2016-10-13 15:33:51

标签: c# entity-framework linq asp.net-mvc-4

好的,我有两个问题。第一个是,让我们说我有一个名为" EntitiesDefinitions"的EF,其中包含一个名为" stringData"的数据表。其中每个单元格定义为varchar(100),如下所示:

 ----------------------------------------------
|      | column1   | column2   | column3   | ... | 
----------------------------------------------
| row1 | "1,2,3,4" | "5,6,7,8" | "9,a,b,c" | ... | 
----------------------------------------------
| row2 | "d,e,f,g" | "h,i,j,k" | "l,m,n,o" | ... | 

每个单元格包含由逗号分隔的4条信息。所以我想知道的是,如果我有一种方法可以执行Linq搜索(作为示例)第1列中每个单元格的第2条信息?

using (EntitiesDefinitions ef = new EntitiesDefinitions())
{
    var v = (from a in ef.stringData where (a.column1... == "e") select a);
}

我知道我可以在每个单元格中生成4列(column1_1,column1_2,... column2_1,column2_2,...),但如果我获得一个包含+250原始列的表格,则无法工作。那么有没有办法进行这样的搜索?

另一个问题也与此有关。回到ASP.NET,我可以使用这样的字符串向我的sql发送查询:

var stringSql = "SELECT * FROM" + "stringData" + "WHERE ([" + "column1" + "] =" + "e" + ")" + "ORDER by ["+ "column1" +"] ASC;"

基本上,我可以定义要搜索的表,给定一个表示该属性/列的字符串值。有没有办法用EF linqs做到这一点?

using (EntitiesDefinitions ef = new EntitiesDefinitions())
{
    var v = (from a in ef.stringData where (a.["column1"]... == "e") select a);
}

我对MVC和EF很新,所以我想知道这是否可行。

2 个答案:

答案 0 :(得分:0)

根据我对你的问题的理解,如果你确定它总是不为空,你可以试试这个:

   var res = ef.stringData.Where(c => c.column1.Split(',')[1] == "e")

对于输入“ef.stringData”的第二个问题,您要查询的表的名称是“stringData”,没有其他方法可以指定表名,或者仅当您要在EF中编写原始SQL查询时

答案 1 :(得分:0)

Fehintola建议之后,我能够针对这些主题进行更多研究,并且我能够找到两个问题的解决方案。如果有人对此感兴趣,我想出的是:

对于第一个问题,虽然不优雅,但我们可以将数据封装在特定字符/分隔符中,然后我们可以在嵌套搜索中处理搜索结果。例如:

using (EntitiesDefinitions ef = new EntitiesDefinitions())
{
    //Data could look like";1;*2*&3&#4#"
    var v = (from a in ef.stringData where select a); //to store the table
    v = c.Where(f => f.column1.Contains("*2*")) //look for the second value
    v = x.Where(f => f.column1.Contains("#4.3#"));//look for the forth value

    //Do some other stuff...like sending the data to a table
}

对于第二个问题,您可以像这样进行原始的SQL查询:

string sqlExample = @"SELECT VALUE a FROM ef.stringData AS a WHERE (a.column1 == '*2*')";
var test = ef.CreateQuery<stringData>(sql).AsQueryable();

这是你可以在sqlExample字符串中放置变量来动态构建你的查询,然后你将获得一个可以用来传递给表的IQueryable对象。

我希望这可以帮助将来的某个人,并感谢所有提出建议的人。