C#, MVC4 - EF Linq searches

本文关键字:Linq searches EF MVC4 | 更新日期: 2023-09-27 18:12:52

好的,我有两个问题。首先,假设我有一个名为"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,所以我想知道如果这是可能的。

C#, MVC4 - EF Linq searches

从我对你的问题的理解来看,如果你确定它总是不为空,你可以尝试一下:

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

对于第二个问题,你输入"ef"。

没有其他的方法来指定表名,或者只有当你想在EF中编写原始sql查询

在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对象,你可以使用,例如,传递到一个表。

我希望这对将来的人有所帮助,并感谢所有提供建议的人。